python - 如何从 subprocess.Popen() 获取输出。 proc.stdout.

我想要执行 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/

相关文章:

linux - 仅当变量包含特定字符串时才运行 Ansible 任务

linux - 如何将 ISO8859-15 转换为 UTF8?

linux - 导出在我的 shell 脚本中不起作用

linux - 为什么使用 dd 克隆磁盘时使用 conv=notrunc?

linux - yum 可以告诉我哪些存储库提供了特定的包吗?

c++ - 在 64 位 Linux 操作系统上编译 32 位程序导致 fatal error

linux - 如何获取自上次使用 bash 修改文件以来的时间(以秒为单位)?

linux - 如何从 Bash 中的字符串中删除所有非数字字符?

linux - shell 脚本 : Run function from script over s

linux - 是否可以使用 shell 脚本递归地创建文件夹?