Python:Popen()。标准普尔()挂起

2024-04-19 23:22:03 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 项目字符串命令行test程序messagereadstderr
1条回答
网友
1楼 · 发布于 2024-04-19 23:22:03

我认为最可能的情况是,在子进程开始执行和打印某些内容之前,必须关闭stdin管道。最可能的情况是子流程仍在等待输入。你知道吗

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

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

如果有效,请查看子进程期望的命令结束。例如,它可能期望\r\n而不是\n。如果不知道底层流程是如何工作的,很难说这里出了什么问题。你知道吗

相关问题 更多 >