Как использовать команду «source» оболочки, используя подпроцесс python - PullRequest
0 голосов
/ 10 июля 2019

Я хочу запустить приведенный ниже код сценария оболочки в python 2.7 (подпроцесс / система).

Но команда источника не работает.

export SHELL=/bin/bash
source build/conf/set_bb_env.sh 

Я искал несколько ответов, но, кажется, это невозможно?

1 Ответ

0 голосов
/ 10 июля 2019

source (или . в POSIX) - это встроенная оболочка, поэтому вам нужна оболочка для ее запуска.

Один из способов запустить ее в subprocess - использовать shell=True аргумент для запуска в оболочке.Но помните, source - это bash-ism , вам лучше использовать ., чтобы остаться в POSIX, если только ваша оболочка для входа не bash / zsh.При запуске чего-либо непосредственно в оболочке, остерегайтесь последствий для безопасности, если вы точно не знаете, что собираетесь запускать.

Другой способ - запустить его как команду оболочки, например:

subprocess.run(['bash', '-c', 'source /path/to/build/conf/set_bb_env.sh'])

В данном случае это команда одноразовая , т. Е. Команда запускается в подоболочке, которая завершается после завершения выполнения команды.Таким образом, ваши параметры source -d не будут доступны в родительской оболочке;в этом случае вы можете объединить команды для их запуска в подоболочке:

subprocess.run(['bash', '-c', 'source /path/to/build/conf/set_bb_env.sh && /run/this/command'])

Выберите метод, который соответствует вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...