【发布时间】:2012-09-07 07:18:38
【问题描述】:
我尝试完成的任务是流式传输 ruby 文件并打印输出。 (注意:我不想一次打印所有内容)
main.py
from subprocess import Popen, PIPE, STDOUT
import pty
import os
file_path = '/Users/luciano/Desktop/ruby_sleep.rb'
command = ' '.join(["ruby", file_path])
master, slave = pty.openpty()
proc = Popen(command, bufsize=0, shell=True, stdout=slave, stderr=slave, close_fds=True)
stdout = os.fdopen(master, 'r', 0)
while proc.poll() is None:
data = stdout.readline()
if data != "":
print(data)
else:
break
print("This is never reached!")
ruby_sleep.rb
puts "hello"
sleep 2
puts "goodbye!"
问题
流式传输文件工作正常。 hello/goodbye 输出以 2 秒的延迟打印。就像脚本应该工作一样。问题是 readline() 最终挂起并且永远不会退出。我从来没有到达最后一张。
我知道这里有很多这样的问题 stackoverflow 但没有一个让我解决了问题。我对整个子流程的事情不太感兴趣,所以请给我一个更实际/具体的答案。
问候
编辑
修复意外代码。 (与实际错误无关)
【问题讨论】:
-
不确定在将代码粘贴到问题中时是否有错字,或者问题是否真实存在。在我看来,
if应该缩进,以便它位于循环内。 -
感谢您的关注。这是我粘贴代码时的错字。现在已经修好了。对此感到抱歉。
-
我不确定,但您的问题是不是和stackoverflow.com/questions/8495794/… 中的问题非常相似?
标签: python subprocess