Python: подпроцесс и запуск bash script с несколькими аргументами

Как мне запустить bash script с помощью модуля подпроцесса, которому я должен дать несколько аргументов?

Это то, что я сейчас использую:

subprocess.Popen(['/my/file/path/programname.sh', 'arg1 arg2 %s' % arg3], \
    shell = True)

bash script, кажется, не принимает ни одного из параметров в. Любые идеи очень ценятся!

Ответы

Ответ 1

Передайте аргументы в виде списка, см. самый первый пример кода в документах:

import subprocess

subprocess.check_call(['/my/file/path/programname.sh', 'arg1', 'arg2', arg3])

Если arg3 не является строкой; преобразуйте его в строку перед тем, как перейти к check_call(): arg3 = str(arg3).

Ответ 2

subprocess.Popen(['/my/file/path/programname.sh arg1 arg2 %s' % arg3], shell = True).

Если вы используете shell = True script, и его аргументы должны быть переданы как строка. Любые другие элементы в последовательности args будут рассматриваться как аргументы оболочки.

Вы можете найти полные документы в http://docs.python.org/2/library/subprocess.html#subprocess.Popen.

Ответ 3

Привет, я знаю, что это решение довольно поздно, но может помочь кому-то.

Пример:

import subprocess
pass_arg=[]
pass_arg[0]="/home/test.sh"
pass_arg[1]="arg1"
pass_arg[2]="arg2"

subprocess.check_call(pass_arg)

В приведенном выше примере представлены параметры arg1 и arg2 в качестве оболочки оболочки script test.sh

По сути, подпроцесс ожидает массив. Таким образом, вы можете заполнить массив и предоставить его в качестве параметра.

Ответ 4

Вы забыли добавить args имя.

subprocess.Popen(args=['./test.sh', 'arg1 arg2 %s' % arg3], shell=True)

Ответ 5

Еще один пример, который не включен во все вышеперечисленные,

subprocess.Popen(['/your/script.sh% s% s% s'% (аргумент1, аргумент2, аргумент3)], shell = True)

Обратите внимание, что при вводе% (аргумент1, аргумент2, аргумент3) не должно быть пробелов между% и (, например,% (аргумент1, аргумент2, аргумент3) недействителен.