Как передать несколько аргументов в моем вызове подпроцесса в python при запуске моего сценария оболочки?
import subprocess
subprocess.check_call('./test_bash.sh '+arg1 +arg2, shell=True)
Это отображает arg1 и arg2, объединенные как один аргумент. Мне нужно передать 3 аргумента в мой сценарий оболочки.
конечно, он объединяется, потому что вы не вставляете пространство между ними. Quickfix будет (с format
и может выйти из строя, если некоторые аргументы содержат пробелы)
subprocess.check_call('./test_bash.sh {} {}'.format(arg1,arg2), shell=True)
вы можете попробовать (более надежный, не нужно цитировать пробелы, автоматическое создание командной строки):
check_call(['./test_bash.sh',arg1,arg2],shell=True)'
(не уверен, что он работает на всех системах из-за shell=True
и списка аргументов, используемых вместе)
или drop shell=True
и вызывать оболочку явно (может завершиться ошибкой, потому что shebang не рассматривается, в отличие от shell=True
, но стоит отказаться от shell=True
, подвергая инъекции кода другим прочим):
check_call(['sh','-c','./test_bash.sh',arg1,arg2])
check_call(['./test_bash.sh',arg1,arg2],shell=True)
? или drop shell = True и добавьте["sh","-c",
перед вашим bash-скриптом?