这个问题与this one非常相似。我想从我的控制台应用程序中读取输出。应用程序不会终止,也不会从标准输入中获取输入。
当我修改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。
答案 0 :(得分:1)
我要检查的第一件事是app.exe中的缓冲。如果“正在启动服务器。\ n”正在缓冲并且没有进入管道,那么在读者方面你无能为力。
因此,请尝试在fflush(stdout)
之后添加printf("Starting the server.\n")
。