使用Python调试Windows控制台应用程序输出的读取

时间:2009-11-06 02:13:26

标签: python windows process popen

这个问题与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。

1 个答案:

答案 0 :(得分:1)

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

因此,请尝试在fflush(stdout)之后添加printf("Starting the server.\n")