Было бы неплохо / полезно, если бы вы могли поделиться некоторой выдержкой из своего кода в своем вопросе.
Но если допустить, что это немного.
Вот способ достичь этого.
import shlex
from subprocess import PIPE, Popen
import logger
def run_script(script_path, script_args):
"""
This function will run a shell script.
:param script_path: String: the path of script that needs to be called
:param script_args: String: the arguments needed by the shell script
:return:
"""
logger.info("Running bash script {script} with parameters:{params}".format(script=script_path, params=script_args))
# Adding a whitespace in shlex.split because the path gets distorted if args are added without it
session = Popen(shlex.split(script_path + " " + script_args), stderr=PIPE, stdout=PIPE, shell=False)
stdout, stderr = session.communicate()
# Beware that stdout and stderr will be bytes so in order to get a proper python string decode the values.
logger.debug(stdout.decode('utf-8'))
if stderr:
logger.error(stderr)
raise Exception("Error " + stderr.decode('utf-8'))
return True
Теперь обратите внимание на пару вещей
- Ваш bash-скрипт должен уметь правильно обрабатывать аргументы, может быть это
$1
или именованные параметры, такие как --file
или -f
- Просто укажите все необходимые параметры в массиве строк в методе
shlex
. - Также обратите внимание на комментарии, упомянутые в коде выше.