可以在执行python脚本的命令中读取返回值

时间:2011-01-07 22:58:35

标签: python linux bash pipe

给出一个bash命令行:

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

./processRaw.py是否有可能找到./getRawStream.jar的返回值并中止链的其余部分?我试图不惜一切代价避免使用python的子进程模块,因为./getRawStream的最终输出大小可以是10或100千兆字节的数量级,并希望减少流在被过滤之前进入内存的位置by processRaw.py

2 个答案:

答案 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