带有修改环境的Python子进程/Popen

带有修改环境的Python子进程/Popen

我认为,运行带有稍微修改环境的外部命令是非常常见的情况。我就是这么做的:

import subprocess, os
my_env = os.environ
my_env["PATH"] = "/usr/sbin:/sbin:" + my_env["PATH"]subprocess.Popen(my_command, env=my_env)

我有一种直觉,认为有更好的方法,它看起来还好吗?


繁华开满天机
浏览 450回答 3
3回答

白衣非少年

我认为os.environ.copy()如果您不打算修改当前进程的os.environ,情况会更好:import subprocess, os my_env = os.environ.copy()my_env["PATH"] = "/usr/sbin:/sbin:" + my_env["PATH"]subprocess.Popen(my_command, env=my_env)

潇潇雨雨

这取决于问题是什么。如果要克隆和修改环境,一个解决方案可以是: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你甚至不能(在python 3上)使用那个构造。正如您所看到的,这里使用的技术(特别是第一种)在环境密钥上的好处通常是有效的python标识符,而且在编码时也知道(在编码时),第二种方法存在问题。如果情况并非如此,你应该去找另一种方法.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python