2014-06-30 63 views
0

我试图捕获通过python启动的进程用于记录目的的输出。但由于某种原因,尽管我所有的尝试都没有解决方案似乎适用于这种特殊情况。 有人可以帮忙吗? 我的代码如下所示:从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) 
+1

它看起来像你指挥输出到'../结果/ trimmed.fq'与你的shell命令,为什么你会被期待从任何标准输出输出? –

+0

您正在使用'> ../ results/trimmed.fq'写入文件。如果您在终端中运行该命令,您是否看到任何输出?还是一切都被转储到该文件? – Engineero

回答

2

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

cmd = 'cat input.fq | fastx_clipper -Q33 -a TGGAATTCTCGGGTGCC -l 5 -c -n -v | fastx_trimmer -Q33 -f 2' 
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' 
相关问题