从Python子进程读取stdout

时间:2014-06-30 17:08:20

标签: python popen

我正在尝试捕获通过python启动的进程的输出以进行日志记录。但出于某种原因,尽管我的所有尝试都没有解决这个问题的解决方案似乎没有。 有人可以帮忙吗? 我的代码如下所示:

cmd = 'cat input.fq | fastx_clipper -Q33 -a TGGAATTCTCGGGTGCC -l 5 -c -n -v | fastx_trimmer -Q33 -f 2 > ../results/trimmed.fq' 
p = Popen(cmd,shell=True,stdout = PIPE) 
for line in p.stdout:output.write(line)

2 个答案:

答案 0 :(得分:2)

> ...将命令的输出重定向到文件;因此,你不会从命令中得到任何输出。删除> ...部分:

cmd = 'cat input.fq | fastx_clipper -Q33 -a TGGAATTCTCGGGTGCC -l 5 -c -n -v | fastx_trimmer -Q33 -f 2'

答案 1 :(得分:0)

> ../results/trimmed.fq确实会将命令的输出重定向到../results/trimmed.fq,如同falsetru所说,所以你不应期望在p.stdout中打印任何行。但是,如果在运行命令后该文件仍为空,我怀疑input.fq或fastx_clipper中的参数有问题。

另外,我只想指出,如果要将输出写入文件并在终端中显示,可以使用tee命令。它看起来像这样:

'cat input.fq | fastx_clipper -Q33 -a TGGAATTCTCGGGTGCC -l 5 -c -n -v | fastx_trimmer -Q33 -f 2 | tee ../results/trimmed.fq'