0

这个问题与这个问题非常相似。我想从我的控制台应用程序中读取输出。该应用程序不会终止,也不会从标准输入中获取输入。

当我修改 rix0rrr 的解决方案以执行我的应用程序然后运行他的解决方案时,Python 挂起,因为 read(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 在他的回答中链接到的 ActiveState 代码。在这种情况下,进程也不会返回任何输出。

这是 Vista 上的 Python 2.4.4。

4

1 回答 1

1

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

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

于 2009-11-06T06:26:21.097 回答