Передача файла в качестве входа в сценарий оболочки через python - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть программа на Python, которая вызывает скрипт оболочки через модуль subprocess ().Я ищу способ передать простой файл, в качестве входных данных для сценария оболочки.Это происходит через subproess и popen?

Я пробовал этот код для лямбда-функции AWS

1 Ответ

0 голосов
/ 27 декабря 2018

Было бы неплохо / полезно, если бы вы могли поделиться некоторой выдержкой из своего кода в своем вопросе.

Но если допустить, что это немного.

Вот способ достичь этого.

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.
  • Также обратите внимание на комментарии, упомянутые в коде выше.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...