gpt4 book ai didi

python - 使用 SSH 时仅在终止时显示 python 脚本的输出?

转载 作者:太空狗 更新时间:2023-10-30 00:58:02 26 4
gpt4 key购买 nike

我正在运行一个脚本来管理远程 (SSH) 机器上的进程。我们称它为 five.py

#!/usr/bin/python
import time, subprocess

subprocess.call('echo 0',shell=True)
for i in range(1,5):
time.sleep(1)
print(i)

如果我现在运行

ssh user@host five.py

我想看看结果

0
1
2
3
4

一秒一秒地出现在我的标准输出中(就像在本地执行时一样)。发生的情况是:我立即从“echo”中得到 0,其余的仅在整个程序完成后立即出现。 (无助于将“five.py”嵌套到 bash 脚本中;通过“python five.py”调用它;或使用“print >> sys.stdout, i”)。

这一定与 python 写入 stdout 的方式有关,因为其他程序的行为很正常。一个功能性的解决方法是

import time, subprocess
import sys

subprocess.call('echo 0',shell=True)
for i in range(1,5):
time.sleep(1)
sys.stdout.write(str(i)+'\n')
sys.stdout.flush()

但肯定有比更改所有打印语句更好的解决方案!

最佳答案

您可以按照 interjay 的提示在 shebang 行添加 -u

#!/usr/bin/python -u

您也可以在关闭缓冲或设置为行缓冲的情况下重新打开标准输出

import os,sys
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) # no buffering
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 1) # line buffering

通常行缓冲是一个不错的选择

关于python - 使用 SSH 时仅在终止时显示 python 脚本的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2336270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com