微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

假设我有一个进程可以打印出一些数据,例如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 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()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐