Sau*_*ode 4 scripting ssh remote python
我正在尝试使用 ssh 在远程机器上运行本地脚本。
假设这是printdelay.py我尝试运行的 python 脚本 ( ):
from time import sleep
print("The first line")
sleep(10)
print("The second line")
Run Code Online (Sandbox Code Playgroud)
我像这样执行脚本:
cat printdelay.py | ssh user@host python
Run Code Online (Sandbox Code Playgroud)
脚本会执行,但我注意到只有在整个脚本运行完毕后才能看到命令的输出。我想在脚本执行时看到输出,即在打印两行之间有延迟。
我注意到
cat printdelay.py | ssh -t -t user@host python
有点做我正在寻找的东西,但是我在伪终端中看到了很多噪音,而不是线条的普通打印。我想有更好的方法来做到这一点。
使用-u标志到python:
cat printdelay.py | ssh user@host python -u
Run Code Online (Sandbox Code Playgroud)
您看到的行为是因为,当 stdout 不是交互式设备(例如 tty 或 pty)时写入 stdout 时printf,函数系列刷新缓冲区的频率较低。正如您所发现的,除了给 Python 一个 pty 之外,您对此无能为力。这将起作用:
scp printdelay.py user@host:/tmp/timedelay.py
ssh -t user@host python /tmp/timedelay.py
Run Code Online (Sandbox Code Playgroud)
(如果你只是 cat timedelay.py | ssh -tt user@host python,python 将有一个 pty,它会更频繁地刷新缓冲区,但你会遇到其他问题,例如,由于 pty 分配与 ssh 一起工作的方式,你的脚本将被打印到 stdout。)
您也可以尝试使用 coreutils 命令 stdbuf。