2015-05-29 49 views
-2

我在重定向python應用程序的輸出時遇到了這個奇怪的問題。我正在運行消息from source,它向控制檯輸出了相當多的東西。「打印」在重定向到另一個應用程序時不工作

我試着用我寫的應用程序過濾出一些行。當我將輸出重定向到一個文件python.exe src\bitmessagemain.py>file.txt它工作正常,一切都發送到文本文件。當我輸出到另一個應用程序python.exe src\bitmessagemain.py | someapp.exe所有「打印」語句似乎被忽略。他們沒有重定向,也沒有傳送給其他應用程序。

使用像「更多」和「類型CON」系統的內部命令時,重定向,甚至不工作

是否有人知道如何解決這一問題?

+1

我不知道Windows是否支持Unix風格管道。可以? – 2015-05-29 13:17:01

+1

@LutzHorn它應該:https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/redirection.mspx?mfr=true – nanny

+0

'python -c「print('test ')「|更多的工作? – eryksun

回答

2

所以我通過實驗找到了答案。似乎提供命令行開關-u通過將輸出設置爲無緩衝二進制模式來解決問題。文件:cmd option -u

我不知道任何副作用,但它似乎完全工作。

出於某種原因,輸出緩衝區遠大於可見控制檯區域的大小。我在無限循環中打印文本,並且當我打印大約半個GB(!)時,輸出被刷新。這隻能在使用重定向時完成。可能會試圖優化性能。

+0

Python的'print'語句/函數在每次寫入後都不會刷新文件緩衝區,這就是爲什麼無緩衝模式可以修復問題。 – martineau

+1

正常情況下,希望緩衝區以較少的系統調用來優化寫入數據,並且管道另一端的讀取過程檢測到stdin不是交互式的以適應處理緩衝的I/O。您尚未描述完整的問題,以清楚說明您要做什麼以及爲什麼管道的另一端存在默認緩衝問題。 – eryksun

+0

使用非緩衝IO的更好方法是在適當時執行'sys.stdout.flush()' –

相關問題