Я пытаюсь запустить скрипт из другого каталога и собрать вывод, используя модуль subprocess
.По какой-то причине я могу получить вывод только с использованием синтаксиса shell=True
, а не синтаксиса shell=False
, который возвращает пустую строку.
В качестве начала, когда в командной строке я запускаю:
python ~/example/path/run.py -r arg1 -g arg2
Я получаю вывод 124
в командной строке.
В другом скрипте Python, в совершенно другом каталоге, я запускаю:
import subprocess as sp
sp.check_output('python /Users/user.name/example/path/run.py -r arg1 -g arg2',
shell = True)
, который возвращает желаемый результат 124
.Тем не менее, я прочитал shell=True
, поэтому следует избегать:
import subprocess as sp
sp.check_output(['python',
'run.py',
'-r arg1',
'-g arg2'],
cwd='/Users/user.name/example/path/')
, который, к сожалению, выдает пустую строку.Я пробовал несколько альтернатив этому, все выводили пустую строку:
import subprocess as sp
sp.check_output(['python',
'/Users/user.name/example/path/run.py',
'-r arg1',
'-g arg2'])
import subprocess as sp
sp.check_output(['python',
'run.py',
'-r arg1',
'-g arg2'],
cwd='/Users/user.name/example/path/',
stderr=sp.STDOUT)
import subprocess as sp
sp.check_output(['python',
'run.py',
'-r', 'arg1',
'-g', 'arg2'],
cwd='/Users/user.name/example/path/',
stderr=sp.STDOUT)
Извиняюсь за то, что не привел воспроизводимый пример, так как проблема, кажется, возникает специально для этой команды.Например, когда я пытаюсь выполнить команду ls
, кажется, что она отлично работает с обоими параметрами синтаксиса.