Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中打印os.popen()的输出,而无需缓冲_Python_Ruby_Popen_Flush - Fatal编程技术网

在python中打印os.popen()的输出,而无需缓冲

在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

假设我有一个进程,它打印出一些数据,比如这个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命令


强制性:

使用
子流程
模块<代码>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()