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

问题描述 投票:0回答:1

我正在尝试将类似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'),因为进程是有状态的,我需要执行多个命令。

python windows subprocess
1个回答
1
投票

我相信最可能的情况是你必须在子进程开始执行和打印之前关闭stdin PIPE。最有可能的情况是子进程仍在输入中。

您可能希望尝试调试,关闭stdin并查看是否有效:

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

如果有效,请查看子进程期望的命令END。例如。它可能是因为它期望\r\n注入\n。在不知道基础过程如何工作的情况下,很难说出这里出了什么问题。

© www.soinside.com 2019 - 2024. All rights reserved.