繁体   English   中英

Python:Popen()。stdout.peek()挂起

[英]Python: Popen().stdout.peek() hangs

我正在尝试将类似REPL的命令行程序集成到Python项目中。 命令行程序接受输入字符串并返回输出字符串,并且在单独运行时可以正常工作。 问题是,当我尝试在其上使用Popen().stdout.peek().read()时,它挂起并且不产生输出。

>>> p = Popen('Test.exe', stdin=PIPE, stdout=PIPE, stderr=PIPE)
>>> p.stdin.write(bytes('message\n', 'utf-8'))
8
>>> p.stdin.flush()
>>> p.stdout.peek()  # Hangs

有趣的是,如果命令行程序也是用Python编写的,这确实可以工作,但是当我实际要使用的程序挂起时,它就会挂起。 在命令行中手动运行时,两个程序的行为均符合预期。 我也不能使用p.communicate('message')因为进程是有状态的,我需要执行多个命令。

我认为最可能的情况是,在子流程开始执行并打印某些内容之前,您必须关闭stdin PIPE。 最有可能的情况是子流程仍在等待输入。

您可能想要尝试进行调试,关闭标准输入,然后查看是否可行:

p.stdin.close()
p.stdout.read()

如果可行,请查看子进程作为命令END的期望。 例如,可能是期望\\r\\n插入\\n 在不知道底层流程如何工作的情况下,很难说出这里出了什么问题。

暂无
暂无

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

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