Как передать несколько аргументов в subprocess.check_call ()?

1

Как передать несколько аргументов в моем вызове подпроцесса в python при запуске моего сценария оболочки?

import subprocess

subprocess.check_call('./test_bash.sh '+arg1 +arg2, shell=True)

Это отображает arg1 и arg2, объединенные как один аргумент. Мне нужно передать 3 аргумента в мой сценарий оболочки.

  • 0
    Вы можете попробовать check_call(['./test_bash.sh',arg1,arg2],shell=True) ? или drop shell = True и добавьте ["sh","-c", перед вашим bash-скриптом?
Теги:
arguments

1 ответ

2
Лучший ответ

конечно, он объединяется, потому что вы не вставляете пространство между ними. 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])
  • 0
    здорово, что сделал это.
  • 0
    Как я могу передать те же несколько аргументов, которые хранятся в виде списка, таких как arg1 = {}, arg2 = {}, и я бы хотел, чтобы скрипт сначала использовал arg1 [0], arg2 [0], а затем увеличивал до следующего arg1 [1], arg2 [1].
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню