【问题标题】:How to read data passed to a subprocess pipe in Python如何在 Python 中读取传递给子进程管道的数据
【发布时间】:2019-03-15 12:03:23
【问题描述】:

我正在尝试创建一个与我的主应用程序并行运行的工作子进程。为此,我使用 subprocess.Popen 和内置的 PIPE。

    p = subprocess.Popen( cmd , stdin=subprocess.PIPE, stdout=subprocess.PIPE, bufsize=1, universal_newlines=True)

    time.sleep(.5)

    data = p.stdout.readline()

    for i in range(10): # repeat several times to show that it works
        p.stdin.write("test")
        line = p.stdout.readline()
        print(line) # read output

我能够将 stdout PIPE 上的数据接收到变量 data 中,但循环中的读取语句总是返回一个空字符串。

我的子流程极其简单:

print("Its working", flush=True)
while(True):
    r=input()
    print("Its working", flush=True)

看来我的子进程无法读取通过标准输入发送的任何数据。如果我删除了 r=input() 命令,并且只不断地打印一个字符串,它可以工作并且我多次收到该行,但是当我尝试通过 input() 检查传入的字符串时,它永远不会得到它。

我是否试图错误地获取传入 PIPE 上的数据,如果是,我该怎么做? 我尝试了其他选项,例如:

r = sys.stdin.buffer.read()
r = sys.stdin.buffer.readline()
r = sys.stdin.read()
r = sys.stdin.readline()

但它们都不起作用。

【问题讨论】:

  • 您必须发送一个换行符 (\n) 才能继续输入。改成p.stdin.write("test\n"),可能效果会更好。

标签: python subprocess pipe stdin


【解决方案1】:

我错过了主程序方面的 \n。感谢 JohanL 指出这一点。现在一切正常。

【讨论】:

    猜你喜欢
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2016-02-06
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多