Я создаю новый дочерний терминал и передавая его переменные окружения вызывающего Shell, используя:питон передать os.environ к ребенку гном-терминал
currentEnv =os.environ.copy()
print("PARENT: " + currentEnv["PATH"])
subprocess.Popen(shlex.split("sudo gnome-terminal -x bash -c 'python3 somescript.py'"), env=currentEnv)
внутри somescript.py Я сообщаю в $ PATH, задаваемой родитель:
currentEnv = os.environ.copy()
print("CHILD:" + currentEnv["PATH"])
Мой выход в родительском терминала выглядит следующим образом:
PARENT: /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/lib:/home/myusername/bin
в е е дочернее окно:
CHILD:/sbin:/bin:/usr/sbin:/usr/bin
В результате, я получаю много «команда не найдена» ошибки в детском сценарии, когда он звонит в любых исполняемых файлов, найденных в родительском $ PATH.
Как передать переменные среды родителя в дочерний процесс? Я думал, что это поведение по умолчанию?
Реальные процессы * do * наследуют среду родителя (включая 'PATH'). Ваша проблема в том, что 'sudo' специально ограничивает переменные среды, которые он передает * своим * детям (для обеспечения безопасности). –
@AndrewMedico: вы должны опубликовать его в качестве ответа. Окружение наследуется даже без указания параметра env. 'sudo' является виновником. – jfs
Спасибо за отзыв, похоже, что судо был главным виновником здесь - он также выделил некоторые проблемы в моих файлах ~./Bashrc и ~./Bash_profile, которые привели меня к решению. – sg90