Python:使用子进程回显

时间:2017-02-09 14:27:35

标签: python subprocess echo qsub

我正在尝试从python脚本向qsub分配任务。

到目前为止,我一直在为qsub提交使用这样的表达式:

echo "python script.py arg1 arg2" | qsub

我试图在python中重现这个命令:

command = 'echo "python sub_master_script.py ' + str(i) + ' ' + path + '" | qsub -pe make 5 -N Teaching_' + str(i) + ' -cwd'
subprocess.call(shlex.split(command))

虽然command带有我通常使用的命令,但是当我启动python脚本时,它被解释为一个简单的echo

而不是开始一份新工作,我把它写在控制台中:

python sub_master_script.py 0.75 /data5/bio/runs-galkin/Iterative/test_OTU.txt | qsub -pe make 5 -N Teaching_0.75 -cwd

为什么会这样?我怎样才能使它发挥作用?

1 个答案:

答案 0 :(得分:2)

你正在大量使用shell功能,主要是通过一起运行2个进程。

subprocess.call(shlex.split(command),shell=True)

是一个quickfix。

正确的方法是使用1 subprocess.Popen个实例,通过communicate提供输入(模拟echo python ...)并删除shell=True(使用{{ 1}}正如Charles所评论,以确保在需要时正确引用字符串)

pipes.quote