如何在Python中读取传递给子流程管道的数据

时间:2018-10-10 14:27:58

标签: python subprocess pipe stdin

我正在尝试创建一个与主应用程序并行运行的工作程序子进程。为此,我使用了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 中,但是循环中的read语句始终返回一个空字符串。

我的子过程非常简单:

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

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

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

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

但是它们都不起作用。

1 个答案:

答案 0 :(得分:0)

我在主程序方面缺少\ n。感谢JohanL指出这一点。现在一切正常。