Я пытаюсь назначить задачи qsub из скрипта python.Python: echo with subprocess
До сих пор я всегда был с помощью таких выражений для представления qsub:
echo "python script.py arg1 arg2" | qsub
Я попытался воспроизвести эту команду в питоне:
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
несет команду я обычно использовать, он интерпретируется как простой echo
при запуске скрипта python.
И вместо того, чтобы начать новую работу, я получаю это написано в консоли:
python sub_master_script.py 0.75 /data5/bio/runs-galkin/Iterative/test_OTU.txt | qsub -pe make 5 -N Teaching_0.75 -cwd
Почему это происходит? Как я могу заставить его работать?
Это предполагает, что 'i' и' path' являются строками, которые не нужно указывать/экранировать. Использование 'pipe.quote()' для подготовки их значений было бы более безопасным (хотя, предоставлено, исходная команда оболочки OP небезопасна/багги точно так же). –
@CharlesDuffy nice add-on. Ред. –
Я попытался использовать ваше решение, и я получаю 'TypeError: __init __() получил неожиданный аргумент ключевого слова 'input'' Использование' subprocess.Popen (command, shell = True, stdout = subprocess.PIPE, stderr = subprocess.STDOUT) ' работает отлично. Я не вижу, что случилось с 'shell = True', поэтому я думаю, что я оставлю это – lotrus28