如果我有用C++編寫的Windows控制檯程序,是否有可能在程序運行時檢索該程序的標準輸出?如果不是,重寫該程序的最佳方法是什麼?我知道我可以輸出到文件並不斷檢查這些文件的更新。有另一種方法嗎?有沒有更好的辦法?在程序運行時可以獲取程序的輸出嗎?
4
A
回答
1
如果它是一個現成的控制檯可執行 可以八方通重定向它的輸出在這樣的文件:
C:>呼應一些文本>文件
或
C:>程序>文件
如果你是這個意思? 由於你的問題不完全清楚。
\\到另一個程序
哦,好吧
但我的第一個答案也習慣了。 由於還有另一種可能性,例如:
c:> program1 |程序2
它使控制檯程序之間的「管道」
程序2接收它標準輸入什麼程序1拋出到標準輸出,在控制檯程序
其常見的老年Unix的方式實踐。
以這種方式,不需要重寫程序來專門支持它。
2
有在代碼項目的一些有趣的文章:
- CommandLineHelper(C#)
- Redirecting an arbitrary Console's Input/Output(MFC/C++)
- Universal Console Redirector(MFC/C++)
1
是的,如果你自己啓動程序:
in CreateProcess,你傳遞一個STARTUPINFO,你可以在其中指定SDIN,STDOUT和STDERR的句柄。請注意,一旦您指定STARTF_USESTDHANDLES
標誌,oyu需要提供全部三個。
此外,手柄需要被繼承(否則,子進程無法訪問它們),所以基本上SECURITY_ATTRIBUTES需要看至少是這樣的:
SECURITY_ATTRIBUTES secattr = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE };
你可以打開的句柄到磁盤包含輸入和接收輸出的文件。或者,這可以是Pipes,可以在控制檯應用程序運行時以增量方式讀取/寫入。
0
如果你只在程序的stdout興趣,POPEN()使這很簡單:
FILE* program_output = popen("command line to start the other program");
//read from program_output as you would read a "normal" file
//...
pclose(program_output);
0
你最有可能需要使用管道來實現這一點,因爲你使用的是Windows,這裏有一個鏈接到MSDN article與一個例子,似乎正是你想要的。
相關問題
- 1. 主線程:可以運行的程序可以被搶佔嗎?
- 2. SBCL:收集運行程序過程的輸出,同時運行
- 3. GPU可以用來運行在CPU上運行的程序嗎?
- 4. 獲取時間程序運行(Python)的
- 5. Android,可以從撥號程序運行應用程序嗎?
- 6. 如何運行Java程序並在PHP中獲取輸出?
- 7. 如何運行C程序並使用Twisted Python獲取程序的輸出
- 8. del_timer可以在處理程序運行時返回嗎?
- 9. JPA:可以在運行時指定JPA提供程序嗎?
- 10. 應用程序在後臺運行時可以截屏嗎?
- 11. 當程序輸出量很大時sbcl運行程序掛起
- 12. 可以通過wine從windows應用程序獲得輸出嗎?
- 13. Java程序運行時可以再次使用命令行嗎?
- 14. 無法從運行java程序的shell腳本獲取輸出
- 15. 運行python程序的輸出行號
- 16. 我們可以在Docker中運行多進程程序嗎?
- 17. 運行程序時出錯?
- 18. 運行程序時出錯?
- 19. Android應用程序可以獲取用戶的時間表嗎?
- 20. 如何運行程序並獲取其輸出
- 21. 當程序關閉時,Phonegap可以運行javascript嗎?
- 22. 運行java應用程序時可以禁止任務欄嗎?
- 23. Apache Spark:MesosClusterDispatcher可以在Docker容器中運行執行程序嗎?
- 24. 獲取自應用程序啓動以來的運行時間
- 25. 有沒有可以對Lua程序輸出值進行排序的程序?
- 26. 可以執行程序但運行程序錯誤的作業?
- 27. 用VB讀取運行在CMD中的程序的每一行輸出是否可以運行?
- 28. 我可以在bluemix python應用程序中運行多個程序嗎?
- 29. 我可以在.NET 2應用程序中運行.NET 4應用程序嗎?
- 30. 我的應用程序可以在iphone OS4上運行嗎?
檢索到哪裏?進入另一個程序或日誌文件? – zebrabox
進入另一個程序 – blindley
而且其他程序也是用C++編寫的? – zebrabox