Python subprocess.Popen:使用">"重定向不起作用

时间:2015-10-30 09:56:53

标签: python bash process

以下代码在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上运行它,那么它可以正常工作。

3 个答案:

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

注意:

  1. 在Popen中不需要拆分或数组。
  2. 同时需要stdoutshell两个参数。