python - 打印出 os.popen() 的输出而不在 python 中缓冲

标签 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 = 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/

相关文章:

Ruby Require 语句和文件位置

python - 如何将 Python 日期时间对象的时间部分转换为自一天开始以来的总秒数

python - 我无法使用 fastai.text 中的 pretrained_model=URLs.WT103

ruby - 是否有 Hash.Merge 的 ActiveRecord 版本?

ruby - 如何为 Chef 处理程序安装依赖项?

python - subprocess.Popen 可选参数

c - 使用popen的非阻塞管道?

ruby - 在 Popen 中合并 stdout 和 stderr

python - 如何在 tkinter 中保存按钮命令的结果?

从 cron 或 subshel​​l 使用绝对路径调用时,Python 不会退出