繁体   English   中英

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

[英]How to read data passed to a subprocess pipe in Python

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

我的子过程非常简单:

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

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

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

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

但它们都不起作用。

我从主程序那边错过了\\ n。 感谢JohanL指出这一点。 现在一切正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM