web-dev-qa-db-ja.com

数か月前にアンバッファーが停止しました

私はpythonコードを実行しているので、「unbuffer」コマンドが非常に重要かつ有用であると感じます。また、あらゆる場所にfflush()と同等のものを置くことはできないと思います。

以前はうまく使用していました:unbuffer python foo.py | tee filename.log

数か月前、Ubuntu 16.04で一部のソフトウェアの自動更新を許可したかどうかはわかりませんが、動作しなくなりました。

$ unbuffer
can't find package Expect
    while executing
"package require Expect"
    (file "/usr/bin/unbuffer" line 6)

いくつかのファイルを編集してExpectを小文字expectに変更しようとしましたが、うまくいきませんでした。

(数か月前)apt-getツールを使用してExpectをアンインストールおよび再インストールしましたが、役に立ちませんでした。私はこれをグーグルで検索できず、他の人が機能していないと不平を言うのを見つけることができないことに驚いています。

友達の18.04 Ubuntuで試しました。彼はそれを使用したことがなく、apt-getでダウンロードし、同じ失敗メッセージを受け取ります。任意の助けに感謝します。

Cat/usr/bin/unbufferへの提案をありがとう@pynexj:

#!/bin/sh
# -*- tcl -*-
# The next line is executed by /bin/sh, but not tcl \
exec tclsh8.6 "$0" ${1+"$@"}

package require expect


# -*- tcl -*-
# Description: unbuffer stdout of a program
# Author: Don Libes, NIST

if {[string compare [lindex $argv 0] "-p"] == 0} {
    # pipeline
    set stty_init "-echo"
    eval [list spawn -noecho] [lrange $argv 1 end]
    close_on_eof -i $user_spawn_id 0
    interact {
    eof {
        # flush remaining output from child
        expect -timeout 1 -re .+
        return
    }
    }
} else {
    set stty_init "-opost"
    set timeout -1
    eval [list spawn -noecho] $argv
    expect
    exit [lindex [wait] 3]
}

私はこのマシンでcondaを使用していますが、source activateを実行していない端末でこれらのテストを実行しています。私のパスの最初の項目は/ home/myusername/anaconda3/binです(それが重要な場合)。

$ apt list --installed | grep -i expect

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

expect/xenial,now 5.45-7 AMD64 [installed]
python3-pexpect/xenial,xenial,now 4.0.1-1 all [installed]
tcl-expect/xenial,now 5.45-7 AMD64 [installed,automatic]

$ locate '*expect*pkgIndex.tcl'
/usr/lib/tcltk/x86_64-linux-gnu/expect5.45/pkgIndex.tcl

@glenn jackmanに感謝します。tclshが〜/ anaconda3/bin/tclshにあり、tclsh8.6を指していることがわかりました。これは、condaインストールの一部としてインストールされたことを意味します。上記のように、anaconda3/binはPATHの一番上にあります。私は自分で何も構築していません。

8.6が古いか新しいかを知っていますか? condaの外で、tclまたはtclshでapt-get更新を試みて、それが役立つかどうかを確認する必要がありますか?

4
Starman

主にアナコンダのインストールが原因で発生したまったく同じ問題にぶつかったと思います。私のシステムは、何年も前にインストールされていたものではなく、Anacondaがそれ自体にもたらしたものに変わっていたようです。

https://anaconda.org/Eumetsat/expect に従って、発行する必要があるのは

conda install -c eumetsat expect

物事を順調に戻すために。

6
brezniczky