Как получить переменную среды в подпроцессе python

#python #environment-variables

Вопрос:

У меня есть программа-драйвер, которая запускает и управляет сотнями процессов с помощью

 p = subprocess.Popen(cmd)
 

Одна из ситуаций, с которой я сталкиваюсь, заключается в следующем:
поскольку многие процессы могут настраивать свою собственную переменную среды с помощью

 os.environ[key] = val
 

которые могут исчезнуть после завершения процесса.

Мой вопрос таков: поскольку некоторые из них могут выйти из строя, я хочу воспроизвести их локально, поэтому мне нужны переменные среды для правильного пути if-else.

Есть ли в python способ получить переменные env из подпроцесса?

Комментарии:

1. Нет. Если у вас есть способ идентифицировать каждый процесс, вы можете сделать так, чтобы подпроцесс сбросил свою среду в файл.

2. Переменные среды являются локальными для процесса. Они исчезают, когда программа, которая их устанавливает, и ее дети выходят. Это всегда так, по замыслу.

Ответ №1:

которые могут исчезнуть после завершения процесса

Это должно быть «которое исчезнет». В модели процессов UNIX переменные env являются частными для каждого процесса. Если вы работаете в Linux, у вас может возникнуть соблазн попробовать прочитать /proc/$pid/environ. Это, однако, было бы неверно, поскольку в нем перечислены только переменные, которые присутствовали при создании процесса. Он не будет включать в себя какие-либо изменения, внесенные процессом в его собственные переменные env.

Короче говоря, невозможно сделать то, что вы хотите, без явного сотрудничества дочернего процесса.