python - 如何从 subprocess.Popen() 获取输出。 proc.stdout.readline() block ,没有数据打印出来

标签 python linux subprocess popen

我想要执行 Test_Pipe.py 的输出,我在 Linux 上尝试了以下代码,但没有成功。

Test_Pipe.py

import time
while True :
    print "Someting ..."
    time.sleep(.1)

Caller.py

import subprocess as subp
import time

proc = subp.Popen(["python", "Test_Pipe.py"], stdout=subp.PIPE, stdin=subp.PIPE)

while True :
    data = proc.stdout.readline() #block / wait
    print data
    time.sleep(.1)

proc.stdout.readline() 行被阻塞,所以没有数据打印出来。

最佳答案

您显然可以使用 subprocess.communicate 但我认为您正在寻找实时输入和输出。

readline 被阻止,因为该进程可能正在等待您的输入。您可以逐个字符地阅读来克服这个问题,如下所示:

import subprocess
import sys

process = subprocess.Popen(
    cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE
)

while True:
    out = process.stdout.read(1)
    if out == '' and process.poll() != None:
        break
    if out != '':
        sys.stdout.write(out)
        sys.stdout.flush()

关于python - 如何从 subprocess.Popen() 获取输出。 proc.stdout.readline() block ,没有数据打印出来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1388753/

相关文章:

Python compiler call another python compiler to execute a script(从一台独立机器到另一台机器执行脚本)

linux - svn 访问用户主目录中的存储库

python - 使用 Python 子进程模块运行具有 10 个以上参数的批处理文件

python - ffmpeg 子进程问题

python - 将时间作为 HHMM 格式的用户输入

python - 对一系列增量的列表理解

python - 如何在windows ubuntu bash上安装python3.6

python - 在python中提取java主类名

python - 如何在Python中循环三个变量,同时它们的总和始终等于1?

linux - 如何找出从共享对象导出的所有符号?