Python, используя Popen для отправки заданий qsub - PullRequest
2 голосов
/ 20 марта 2019

Мне нужно написать скрипт Python для отправки задания с использованием qsub (SGE).

Команда, которую я хочу выполнить, имеет вид:

qsub -by /usr / bin / L2prod filein fileout

где L2prod - это скомпилированная программа (двоичный файл, это причина опции -by), а filein / fileout - просто строки с именем ввода/выходной файл.Если я открою оболочку и наберу предыдущую строку, все пойдет хорошо.

В моей программе на Python у меня есть:

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

и вывод в файле журнала:

ИНФОРМАЦИЯ: job_submit: выполняется: qsub -by / usr / bin / L2prod /data/L1/20180414-222503_L1.txt /data/L2/20180414-222503_L2.txt

ПросмотрВ журнале кажется, что командная строка верна, но я получил следующую ошибку:

qsub: команда, необходимая для двоичного задания

, и задание не было отправлено.

Похоже, опция "-by" была проигнорирована в методе .Popen ().Что я делаю неправильно?Я думал, что опция shell = True исправит это.

1 Ответ

1 голос
/ 20 марта 2019

Вы должны указать каждый флаг как отдельный строковый элемент списка.Первая строка отличается.

# 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...