Как запустить сценарий оболочки в качестве источника, используя python для установки переменных среды? - PullRequest
0 голосов
/ 21 июня 2020

Я создал сценарий оболочки, который используется для установки переменных среды. Я пытаюсь запустить этот сценарий с помощью сценария python, но каждый раз выдает ошибку в виде «Команда не найдена». Я хочу запустить сценарий оболочки в качестве источника для настройки переменных среды.

Python : 2.7.5
Script Name : abc.sh
Normal Execution on shell : source abc.sh

Пробовал использовать

python : os.system ("source abc.sh") 

, это показывает ошибку как

"Command not found".

Кто-нибудь может помочь мне, как успешно запустить этот скрипт в качестве источника через python?

Ответы [ 2 ]

0 голосов
/ 22 июня 2020

Ошибка вызвана тем, что source - это «встроенная» команда оболочки, а не внешняя команда в вашем $ PATH. Но более фундаментальная проблема заключается в том, что то, что вы пытаетесь сделать, не будет работать из-за того, как работают переменные среды.

Переменные окружения являются частными для каждого процесса. Они не являются глобальными, и процесс не может изменять окружение другого процесса; по крайней мере, без сотрудничества с другим процессом. Когда вы запускаете процесс, он наследует копию переменных env родительского процесса, или родитель предоставляет явный набор переменных env для порождаемого дочернего процесса. В любом случае у каждого процесса есть свои собственные частные переменные окружения. Таким образом, даже если бы вы сделали

os.system("sh -c 'source abc.sh'")

, это изменило бы только переменные env подпроцесса sh. Это не изменит среду процесса python.

Простейшее решение - запустить оболочку, выполнить source abc.sh, а затем exec вашу python программу. Если вам абсолютно необходимо установить переменные env, запустив сценарий оболочки из вашей программы python, ваш сценарий должен будет записать переменные в stdout. Затем ваша программа python должна будет прочитать этот вывод и проанализировать его, чтобы извлечь имена и значения переменных env, а затем вызвать os.putenv(), чтобы установить каждую переменную в процессе python.

0 голосов
/ 21 июня 2020

Попробуйте ввести команду в командной строке. Это потому, что вы не определили os в своей команде python: os.system ("source ab c. sh"). Ваш компьютер не может получить доступ к os.system. Сначала вам нужно установить пакеты python, в которых находится модуль os.system.

...