Как вызвать функцию / переменную скрипта оболочки из python?

Можно ли вызвать сценарий оболочки и использовать функции / переменную, определенные в скрипте из python?

Скрипт – unix_shell.sh

#!/bin/bash function foo { ... } 

Можно ли вызвать эту функцию foo из python?

Решение:

  1. Функции: Преобразование функций оболочки в функции python
  2. Для локальных переменных оболочки (не экспортируемых) запустите эту команду в оболочке непосредственно перед вызовом сценария python:
    export $ (set | tr '\ n' '')

  3. Для глобальных переменных оболочки (экспортированных из оболочки) в python вы можете: импортировать os print os.environ ["VAR1"]

4 Solutions collect form web for “Как вызвать функцию / переменную скрипта оболочки из python?”

Нет, это невозможно. Вы можете выполнить сценарий оболочки, передать параметры в командной строке и распечатать данные, которые вы могли бы проанализировать с помощью Python.

Но это не вызов функции. Это все еще выполняет bash с параметрами и возвращает строку на stdio.

Это может сделать то, что вы хотите. Но это, вероятно, не самый правильный способ сделать это. Бэш не может сделать так много вещей, которые Python не может. Вместо этого выполните функцию в Python.

Да, аналогично тому, как вы могли бы назвать это из другого сценария bash:

 import subprocess subprocess.check_output(['bash', '-c', 'source unix_shell.sh && foo']) 

Я не знаю много о python, но если вы используете export -f foo после определения функции сценария оболочки, тогда, если вы запустите sub bash, эту функцию можно вызвать. Без export вам нужно запустить сценарий оболочки как . script.sh . script.sh внутри sub bash запущен в python, но он будет запускать все в нем и будет определять все функции и все переменные.

Вы можете разделить каждую функцию в свой собственный файл bash. Затем используйте Python для передачи правильных параметров в каждый отдельный файл bash.

Это может быть проще, чем просто переписать функции bash в Python самостоятельно.

Затем вы можете вызвать эти функции, используя

 import subprocess subprocess.call(['bash', 'function1.sh']) subprocess.call(['bash', 'function2.sh']) # etc. etc. 

Вы также можете использовать подпроцесс для передачи параметров.

Python - лучший язык программирования в мире.