以下代码在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上运行它,那么它可以正常工作。
答案 0 :(得分:1)
你可以尝试
command = toolpath + " " + query + " " + number + " > " + output;
process = subprocess.Popen(command.split(), stdout=subprocess.PIPE,Shell=True);
output = process.communicate()[0];
答案 1 :(得分:1)
您不需要使用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]
答案 2 :(得分:0)
两个当前答案均无效!
这有效(已在Python 3.7上测试):
subprocess.Popen(['./my_script.sh arg1 arg2 > "output.txt"'],
stdout=subprocess.PIPE, shell=True)
注意:
stdout
和shell
两个参数。