以下代码在 Python 中无法正常运行。问题是输出没有通过使用 >
重定向到 output
:
command = toolpath + " " + query + " " + number + " > " + output;
process = subprocess.Popen(command.split(), stdout=subprocess.PIPE);
output = process.communicate()[0];
如果打印它,命令实际上如下:
./subsetA.pl ./remainingqueries.fasta 100 > ./tmpQuery.fasta
因此,perl 脚本 subsetA.pl
接受两个参数并将其写入 stdout
,后者被重定向到 tmpQuery.fasta
。但是调用该命令后,tmpQuery.fasta
为空。
如果我直接在 CLI 上运行它,那么它就可以完美运行。
最佳答案
您不需要使用 Popen
shell 的输出重定向运算符;这就是 stdout
参数的用途。
command = [toolpath, query, number]
with open(output) as output_fh:
process = subprocess.Popen(command, stdout=output_fh)
由于您正在调用 communicate
来获取标准输出,因此您根本不想重定向输出:
command = [toolpath, query, number]
process = subprocess.Popen(command, stdout=subprocess.PIPE)
output = process.communicate()[0]
关于Python子进程.Popen : redirection with ">" does not work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33433167/