在python中打印os.popen()的输出,而无需缓冲
假设我有一个进程,它打印出一些数据,比如这个ruby代码在python中打印os.popen()的输出,而无需缓冲,python,ruby,popen,flush,Python,Ruby,Popen,Flush,假设我有一个进程,它打印出一些数据,比如这个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 = pinga
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命令
强制性: 使用
子流程
模块<代码>os.popen由it提供
@nosklo:ruby代码带有$stdout.flush,运行良好。但我在运行python代码时出错。这有什么问题吗?相关的:
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()