我正在运行一个脚本来管理远程(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)
Run Code Online (Sandbox Code Playgroud)
如果我现在跑
ssh user@host five.py
Run Code Online (Sandbox Code Playgroud)
我想看看输出
0
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
逐秒出现在我的标准输出上(就像在本地执行时那样)..会发生什么:我立即从"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()
Run Code Online (Sandbox Code Playgroud)
但是必须有一个比改变我所有的打印陈述更好的解决方案!
你可以在shebang线上添加-u作为interjay暗示
#!/usr/bin/python -u
Run Code Online (Sandbox Code Playgroud)
您也可以在关闭缓冲或设置为线缓冲的情况下重新打开stdout
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
Run Code Online (Sandbox Code Playgroud)
通常行缓冲是一个不错的选择
归档时间: |
|
查看次数: |
2824 次 |
最近记录: |