Python,使用Popen提交qsub作业

时间:2019-03-19 23:23:40

标签: python popen qsub

我必须编写一个python脚本才能使用qsub(SGE)提交作业。

我要执行的命令的格式为:

  

qsub -b y / usr / bin / L2prod filein fileout

其中L2prod是已编译程序(二进制文件,这是-b y选项的原因),而filein / fileout只是具有输入/输出文件名的字符串。 如果我打开一个外壳并输入上一行,一切都会顺利进行。

在我的python程序中,我有:

... 
 args=['qsub -b y ', L2prod, filein, fileout] 
 log.info('executing: '+' '.join(map(str,args)))
 process=subprocess.Popen(args,shell=True)
...
etc.

,日志文件中的输出为:

  

INFO:job_submit:执行中:qsub -b y / usr / bin / L2prod   /data/L1/20180414-222503_L1.txt /data/L2/20180414-222503_L2.txt

查看日志,似乎命令行是正确的,但是出现以下错误:

  

qsub:二进制作业所需的命令

没有作业提交。

.Popen()方法中似乎忽略了“ -b y”选项。我究竟做错了什么?我以为shell = True选项可以解决此问题。

1 个答案:

答案 0 :(得分:1)

您必须提供每个标志作为列表的单独字符串元素。第一行是不同的。

# args=['qsub -b y ', L2prod, filein, fileout]
args=['qsub', '-b', 'y', L2prod, filein, fileout] 
log.info('executing: '+' '.join(map(str,args)))
process=subprocess.Popen(args,shell=False)

为什么要避免使用shell = True参数。

https://medium.com/python-pandemonium/a-trap-of-shell-true-in-the-subprocess-module-6db7fc66cdfd