Ошибка вызвана тем, что 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.