web-dev-qa-db-ja.com

ssh経由でスクリプト出力をリアルタイムで表示

Sshを使用してリモートマシンでローカルスクリプトを実行しようとしています。

これがpythonスクリプト(printdelay.py)私が実行しようとしているもの:

from time import sleep  
print("The first line")  
sleep(10)  
print("The second line")

次のようにスクリプトを実行します。

cat printdelay.py | ssh user@Host python

スクリプトは実行されますが、スクリプト全体の実行が終了して初めてコマンドの出力が表示されることに気付きました。スクリプトが実行されたとき、つまり2行の印刷の間に遅延が発生したときの出力を確認します。

きがついた

cat printdelay.py | ssh -t -t user@Host python

ある種、私が探していることを実行しますが、線の単純な印刷ではなく、疑似端末に多くのノイズが表示されます。これを行うにはもっと良い方法があると思います。

3
SauceCode

使用 -u pythonへのフラグ:

cat printdelay.py | ssh user@Host python -u

stdoutがttyやptyなどの対話型デバイスではないときにstdoutに書き込む場合、printfファミリーの関数がバッファーをフラッシュする頻度が低くなります 。あなたが発見したように、Python a ptyを与えることを除いて、それについてあなたができることはたくさんありません。これはうまくいくでしょう:

scp printdelay.py user@Host:/tmp/timedelay.py
ssh -t user@Host python /tmp/timedelay.py

(あなただけの場合cat timedelay.py | ssh -tt user@Host python、pythonはptyを持ち、バッファをより頻繁にフラッシュしますが、他の問題があります。たとえば、pty割り当ての動作方法が原因で、スクリプトがstdoutに出力されます。 sshで。)

coreutilsコマンドstdbufを使用 を試すこともできます。

5
jayhendren