私は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更新を試みて、それが役立つかどうかを確認する必要がありますか?
主にアナコンダのインストールが原因で発生したまったく同じ問題にぶつかったと思います。私のシステムは、何年も前にインストールされていたものではなく、Anacondaがそれ自体にもたらしたものに変わっていたようです。
https://anaconda.org/Eumetsat/expect に従って、発行する必要があるのは
conda install -c eumetsat expect
物事を順調に戻すために。