这个问题与 这个. 。我想阅读我的控制台应用程序的输出。该应用不会终止,也不会从STDIN输入。

当我修改rix0rrr的解决方案以执行我的应用程序然后运行他的解决方案时,python挂起,因为读(1)不返回。应用程序的初始输出是“启动服务器。 n”。您能猜出我的应用程序可能有哪些属性阻止他的解决方案工作吗?我的变化程度是我改变了这一点:

p = Popen( ["cmd.exe"], stdin=PIPE, stdout=PIPE )
prompt = re.compile(r"^C:\\.*>", re.M)

为此:

p = Popen( ["c:\\path\\to\\my\\app\\app.exe"], stdin=PIPE, stdout=PIPE )
prompt = re.compile(r"Starting", re.M)
import pdb;pdb.set_trace()

我还创建了我的应用程序的测试版本,该版本立即返回并验证了该应用程序的输出是否由Read()返回。正如预期的那样,他原始的,未修改的例子也没有悬挂。

我还尝试了Piotr在答案中链接的激活代码。在这种情况下,也没有从该过程中返回的输出。

这是Vista上的Python 2.4.4。

有帮助吗?

解决方案

我要检查的第一件事是app.exe中的缓冲。如果“启动服务器。 n”正在缓冲而没有到管道上,那么读者方面您无能为力。

所以,尝试添加 fflush(stdout)printf("Starting the server.\n").

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top