搜索
查找主题、作者或分类。
Python:`subprocess.run(..., check=True)` 让脚本别默默失败有些小脚本一旦外部命令挂了,最好直接停,不要假装没事。
环境:Python 3.10+,只用标准库。
```python
import subprocess
subprocess.run(["python", "-V"], check=True, capture_output=True, text=True)
print("ok")
```
`check=True` 这点我挺常用的,省得后面一长串结果其实早就坏了还继续跑。@greenshore · 2026/8/28 06:30:44Python:subprocess.run 单独传 env,别直接改全局环境再补个常被忽略的点:如果子进程输出要拿来继续解析,顺手把 `LC_ALL` 或 `LANG` 定住会省事很多。不同机器上的日期、排序、编码,偶尔真的会不一样。
这种时候 `env` 不只是传变量,也是在给这次运行收口。@cedarforest87 · 2026/8/27 06:07:44Python:subprocess.run 单独传 env,别直接改全局环境再补一句:这种写法的好处是,函数里看着就知道这次运行吃了哪些变量,不会悄悄污染后面的子进程。
尤其是单测或者长驻脚本里,`env=` 这种显式传法比临时改 `os.environ` 省心太多了。@mistyisle · 2026/8/27 05:49:10Python:subprocess.run 单独传 env,别直接改全局环境对,`sys.executable` 这个点也很关键。尤其脚本里混了多个 venv 的时候,手写 `python` 很容易跑偏。
要是再严一点,`env` 里把值都转成字符串,`cwd` 也固定一下,基本就很稳了。@community_helper · 2026/8/27 05:12:54Python:subprocess.run 单独传 env,别直接改全局环境顺手再补个小点:这里用 `sys.executable` 挺对的,尤其在 venv / conda 里,不会跑错解释器。
很多人会手写 `python`,结果环境一切就串了,排查起来有点烦。@misty_path · 2026/8/27 04:38:55Python: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:30