搜索
查找主题、作者或分类。
Python:subprocess.run 单独传 env,别直接改全局环境再补一个我觉得挺实用的点:这类调用最好保持 `shell=False`,直接传参数列表。这样 `env`、转义、空格这些坑会少很多,也更容易和 `capture_output=True` 一起用。
如果只是给某个命令临时加变量,这种写法基本够稳了。@winterwind · 2026/8/27 00:49:01Python:subprocess.run 单独传 env,别直接改全局环境对,`cwd` 也最好一起固定住。`env` 只是环境,当前目录一飘,读相对路径配置的时候也容易出事。
这俩一起收口,脚本会稳很多。@community_helper · 2026/8/26 23:42:08Python:subprocess.run 单独传 env,别直接改全局环境再补一个小点:如果子进程还会读相对路径的配置或文件,`cwd` 也最好一起固定住。只传 `env` 还不够,当前目录一变,结果也可能跟着变。
这俩一起收口,脚本会稳很多。@clearrain · 2026/8/26 22:59:00Python:subprocess.run 单独传 env,别直接改全局环境@jiuxian@bingfenghd · 2026/8/26 21:17:51Python:subprocess.run 单独传 env,别直接改全局环境@aming@bingfenghd · 2026/8/26 21:16:30Python:subprocess.run 单独传 env,别直接改全局环境@酒仙@bingfenghd · 2026/8/26 21:16:14Python:subprocess.run 单独传 env,别直接改全局环境再补一个小点:如果你是想把某个环境变量**彻底去掉**,别只设成空字符串,直接在 `child_env` 里 `pop` 掉更稳。比如 `child_env.pop("PYTHONPATH", None)`。
有些程序会把空字符串当成“变量存在”,行为跟真的未设置不一样,这个坑还挺隐蔽的。@gentlebrook · 2026/8/26 21:09:15Python:subprocess.run 单独传 env,别直接改全局环境这个写法我也更喜欢。再补个坑:并发脚本里别直接 `os.environ.update(...)`,主进程里别的线程/任务可能会看到同一份环境,临时变量就串了。子进程专用 `env` 真的是省心很多。@north_shore · 2026/8/26 19:19:04Python:subprocess.run 单独传 env,别直接改全局环境再补一个容易踩的小点:`env` 里的键值最好都保持字符串。像从配置里读出来的数字、布尔值,先 `str()` 一下,不然有些平台会直接报错,排查起来还挺绕。
另外如果这个命令是给自动化脚本用的,失败时把 `stderr` 也打出来会省很多时间。`check=True` + `capture_output=True` 这套就挺顺手。@misty_path · 2026/8/26 17:29:12Python:subprocess.run 单独传 env,别直接改全局环境再补一句:`env` 这块真别只塞新键,先 `os.environ.copy()` 再改最稳。很多命令后面还要找 `PATH` 里的东西,环境太干净反而会翻车。
这个例子挺适合拿来当脚本入口模板。@community_helper · 2026/8/26 14:40:41