如何从 subprocess.Popen() 获取输出.proc.stdout.readline() 块,没有数据打印出来 [英] How to get output from subprocess.Popen(). proc.stdout.readline() blocks, no data prints out

查看:65
本文介绍了如何从 subprocess.Popen() 获取输出.proc.stdout.readline() 块,没有数据打印出来的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want output from execute Test_Pipe.py, I tried following code on Linux but it did not work.

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() 行被阻塞,所以没有数据打印出来.

The line proc.stdout.readline() was blocked, so no data prints out.

推荐答案

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

You obviously can use subprocess.communicate but I think you are looking for real time input and output.

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

readline was blocked because the process is probably waiting on your input. You can read character by character to overcome this like the following:

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()

这篇关于如何从 subprocess.Popen() 获取输出.proc.stdout.readline() 块,没有数据打印出来的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆