Это зависит от того, в чем проблема. Если это клонировать и модифицировать среду, одним из решений может быть:
subprocess.Popen(my_command, env=dict(os.environ, PATH="path"))
Но это в некоторой степени зависит от того, что замененные переменные являются действительными идентификаторами Python, которыми они чаще всего являются (как часто вы сталкиваетесь с именами переменных среды, которые не являются буквенно-цифровыми + подчеркивания или переменными, начинающимися с цифры?).
В противном случае вы могли бы написать что-то вроде:
subprocess.Popen(my_command, env=dict(os.environ,
**{"Not valid python name":"value"}))
В очень странном случае (как часто вы используете управляющие коды или не-ascii символы в именах переменных окружения?), Что ключи окружения bytes
вы не можете (на python3) даже использовать эту конструкцию.
Как вы можете видеть, методы (особенно первые), используемые здесь, выгодно используют ключи среды, как правило, действительные идентификаторы Python, а также известные заранее (во время кодирования), у второго подхода есть проблемы. В случаях, когда это не так, вы, вероятно, должны искать другой подход .
os.pathsep
вместо «:» пути, которые работают на разных платформах. См. Stackoverflow.com/questions/1499019/…