给出一个bash命令行:
./getRawStream.jar | ./processRaw.py > product.csv 2> product.stderr
./processRaw.py是否有可能找到./getRawStream.jar的返回值并中止链的其余部分?我试图不惜一切代价避免使用python的子进程模块,因为./getRawStream的最终输出大小可以是10或100千兆字节的数量级,并希望减少流在被过滤之前进入内存的位置by processRaw.py
答案 0 :(得分:4)
这不是管道的工作方式。管道处理输入和输出,而不是生成它们的程序。
也就是说,subprocess
也可以使用管道 - 如果你通过stdout=subprocess.PIPE
,你将获得一个stdout流,用于你可以逐步读取的进程。当然,如果你关心返回代码,你必须等待第一个进程无论如何都要结束,这意味着缓冲没有太大区别 - 第一个命令的整个输出将在你看到之前被缓冲。返回代码。
答案 1 :(得分:0)
这样的事情可能有所帮助:
./getRawStream.jar > stage1.stodout
if [ ... ];
then
./processRaw.py < stage1.stodout > product.csv 2> product.stderr
fi
rm -f stage1.stodout