Ssh
通過 ssh 實時查看腳本輸出
我正在嘗試使用 ssh 在遠端機器上執行本地腳本。
假設這是
printdelay.py
我要執行的 python 腳本 ( ):from time import sleep print("The first line") sleep(10) print("The second line")
我像這樣執行腳本:
cat printdelay.py | ssh user@host python
腳本執行,但我注意到只有在整個腳本完成執行後才能看到命令的輸出。我想看到腳本執行時的輸出,即列印兩行之間有延遲。
我注意到
cat printdelay.py | ssh -t -t user@host python
有點做我正在尋找的東西,但是我在偽終端中看到很多噪音,而不是線條的普通列印。我想有更好的方法來做到這一點。
使用
-u
標誌到python:cat printdelay.py | ssh user@host python -u
您看到的行為是因為,當 stdout 不是互動式設備(例如 tty 或 pty)時寫入 stdout 時
printf
,函式族會不太頻繁地刷新緩衝區。正如您所發現的,除了給 Python 一個 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 分配與 ssh 一起工作的方式,你的腳本將被列印到標準輸出。)您也可以嘗試使用 coreutils 命令 stdbuf。