0

我在使用 subprocess.Popen 时遇到了一个问题。我在这里解决了这个问题。当我将以下编辑添加到 fake_utility.py 时,即在 subprocess.Popen 添加stderr= subprocess.PIPE :

#fake_utility.py
import time
i = 0
while True:
   print hex(i)*512
   i += 1
   time.sleep(0.5)

#python interpreter
import subprocess
proc = subprocess.Popen(['python','fake_utility.py'],stdout=subprocess.PIPE, stderr=subprocess.PIPE)
for err in proc.stderr:
    print "err::", err

for line in proc.stdout:
   print "test:", line.rstrip()

程序没有响应。当我按下 Ctrl-C 时,我得到以下信息:

Traceback (most recent call last):
File "run_fake_utility.py", line 6, in <module>
    err = proc.stderr.readline()
KeyboardInterrupt

它在 proc.stderr.readline() 中被阻止。如果我删除从 proc.stderr 读取的行,程序运行良好。

可能的错误是什么?我正在使用 Python2.6。

4

1 回答 1

1

阻止从 STDERR 读取将表明子进程尚未向该文件句柄写入任何内容。

你真的期待什么吗?(即:如果您从 shell 手动运行相同的命令并将 STDERR - 2>file.txt- 重定向到文件,该文件是非空的吗?)

否则,可能会发生一些常见的事情:

  • 您尚未在 STDERR 输出中收到换行符
  • 您还没有收到足够的数据来填充一些底层缓冲区
于 2013-01-16T05:20:37.997 回答