2009-11-06 53 views
0

此問題與this one非常相似。我想讀取我的控制檯應用程序的輸出。該應用程序不會終止,也不需要從stdin輸入。使用Python調試Windows控制檯應用程序的輸出讀數

當我修改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() 

我也創建了我的應用程序,立即返回的測試版本,並驗證返回從應用程序的輸出通過閱讀()在這種情況下。正如預期的那樣,他的原始未經修改的例子也不會被掛起。

我還試用了Piotr在他的答案中鏈接到的ActiveState代碼。在這種情況下,也不會有輸出返回。

這是Vista上的Python 2.4.4。

+0

您需要展示更多代碼,包括您如何閱讀流程'STDOUT – 2009-11-06 06:08:35

回答

1

我要檢查的第一件事是app.exe中的緩衝。如果「正在啓動服務器。\ n」正在被緩衝並且沒有進入管道,那麼在讀者一側就沒有辦法做。

因此,請嘗試在printf("Starting the server.\n")之後加fflush(stdout)

+0

就是這樣! .. – Brian 2009-11-13 05:38:05

相關問題