【问题标题】:Python, using Popen to submit qsub jobsPython,使用 Popen 提交 qsub 作业
【发布时间】:2019-08-10 14:14:47
【问题描述】:

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

我要执行的命令格式为:

qsub -by /usr/bin/L2prod filein fileout

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

在我的 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:executing: qsub -by /usr/bin/L2prod /data/L1/20180414-222503_L1.txt /data/L2/20180414-222503_L2.txt

看日志好像命令行是正确的,但是报错如下:

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

并且没有提交任何作业。

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

【问题讨论】:

  • 试试args=['qsub', '-b', 'y ', L2prod, filein, fileout]
  • 有效!非常非常感谢!
  • 酷,我发布了与答案相同的内容,以便其他人更容易看到。

标签: python popen qsub


【解决方案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

【讨论】:

  • 正如我所说,它有效,谢谢!但准确地说,我的情况的正确选项是:shell=False
  • @fool 谢谢。我调整了答案并添加了相关链接。
猜你喜欢
  • 1970-01-01
  • 2014-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
相关资源
最近更新 更多