Ssh

通過 ssh 實時查看腳本輸出

  • November 22, 2016

我正在嘗試使用 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

引用自:https://unix.stackexchange.com/questions/325236