假设我有一个进程可以打印出一些数据,例如这个 ruby 代码。
1.upto(10) {
|i|
puts i
puts "\n"
sleep 0.6
}
我想要一个 python 代码来生成这个过程,并从中读取数据以打印出来。
import os
import sys
cmd = "ruby /Users/smcho/Desktop/testit.rb";
pingaling = os.popen(cmd,"r")
while 1:
line = pingaling.readline()
if not line: break
print line,
sys.stdout.flush()
pingaling.close()
这段代码的问题是它没有一个一个地打印数字。似乎 python 在最后一点打印出所有缓冲数据。
有没有办法在没有缓冲的情况下打印出衍生进程的输出?
最佳答案
数据正在由 ruby 缓冲。使用类似的东西
$stdout.flush
让它齐平。我不确定这样做是否是正确的 ruby 命令。
强制性的:
使用subprocess
模块。 os.popen
has been replaced由它。
import subprocess
import sys
cmd = ["ruby", "/Users/smcho/Desktop/testit.rb"]
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
for line in iter(p.stdout.readline, ''):
print line,
sys.stdout.flush()
p.wait()
关于python - 打印出 os.popen() 的输出而不在 python 中缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2304072/