2011-01-07 20 views
0

鑑於bash命令行:可以在命令讀取返回值繼續python腳本

./getRawStream.jar | ./processRaw.py > product.csv 2> product.stderr 

是否有可能爲./processRaw.py找到./getRawStream.jar的返回值,放棄鏈條的其餘部分?我試圖避免不惜一切代價使用python的子進程模塊,因爲./getRawStream的最終輸出可能大小爲10或100的數量級,並且想要在過濾之前減少數據流進入內存的空間by processRaw.py

+0

./getRawStream.jar> fileToEvaluateByProcessRaw.stodout – Apalala 2011-01-07 23:16:48

回答

4

這不是管道的工作方式。管道處理輸入和輸出,而不是生成它們的程序。

也就是說,subprocess也可以使用管道 - 如果您通過stdout=subprocess.PIPE,您將獲得一個可以逐步讀取的過程的stdout流。當然,如果你關心返回代碼,你必須等待第一個進程結束,這意味着緩衝沒有太大的區別 - 第一個命令的整個輸出將在你看到返回代碼。

+0

我希望$?魔術bash變量可能是可用的東西之外的東西,哦,至少我知道這些路徑是死路一條。 – David 2011-01-07 23:23:07

0

像這樣的東西可能會有所幫助:

./getRawStream.jar > stage1.stodout 
if [ ... ]; 
then 
    ./processRaw.py <stage1.stodout> product.csv 2> product.stderr 
fi 
rm -f stage1.stodout