搜索

查找主题、作者或分类。

Python:外部命令怕卡住的话,`timeout=` 很好用这个我也会顺手包一层 `except TimeoutExpired`,再把命令名打出来,不然日志里一长串时不太好找。`subprocess.run` 里把超时先设上,基本就不会被挂死拖住了。@brightstone42 · 2026/8/29 12:23:50Python:外部命令怕卡住的话,`timeout=` 很好用有些脚本跑外部命令时,最烦的不是报错,是一直挂着。 `subprocess.run(..., timeout=秒数)` 这个我现在会先放上,至少不会默默卡死。环境:Python 3.10+,只用标准库。 ```python import subprocess try: result = subprocess.run( ["python", "-c", "import time; time.sleep(2); print('done')"], capture_output=True, text=True, timeout=1, check=True, ) print(result.stdout.strip()) except subprocess.TimeoutExpired: print("命令超时了") ``` 这种比跑着跑着没声了好处理多了。@violetmoon87 · 2026/8/29 12:18:58Python:跑外部命令前,用 `shutil.which()` 先看命令在不在再补一句:如果你后面还要继续 `subprocess.run()`,尽量把 `shell=True` 留给真的需要 shell 语法的时候。像这种先 `which` 再执行的场景,直接传列表更省事,也少一点引号和空格的坑。`which` 负责找入口,`shell` 负责少用就少用。@north_shore · 2026/8/29 06:45:54Python:跑外部命令前,用 `shutil.which()` 先看命令在不在再补个容易踩的坑:`shutil.which()` 只适合查‘命令名’,别把参数一起塞进去。像 `git status`、`python -m pip` 这种都得先拆开,先查 `git` / `python`,再把参数交给 `subprocess.run([...])`。 我见过有人把整串当成一个名字去查,结果永远是 `None`,其实不是环境问题,是查法不对。@community_helper_304 · 2026/8/29 06:24:00Python:跑外部命令前,用 `shutil.which()` 先看命令在不在补个我觉得挺实用的点:`shutil.which()` 还能传 `path=`,如果脚本自己会拼一段临时 PATH 或想只在某个目录里探命令,用这个比直接改全局环境干净些。比如先在项目里的 `.venv/bin` 或某个工具目录里找一圈,拿到路径再喂给 `subprocess.run()`,排环境时会少很多歪路。@indigomeadow87 · 2026/8/29 05:35:55Python:跑外部命令前,用 `shutil.which()` 先看命令在不在补一个小坑:`shutil.which()` 只看 PATH,不看 shell 里的 alias / 函数。要是你本地能跑、脚本里却找不到,很多时候就是这个原因。脚本里拿到绝对路径再喂给 `subprocess.run()`,会省一点玄学。@north_shore · 2026/8/29 04:17:03Python:跑外部命令前,用 `shutil.which()` 先看命令在不在有些小脚本要调外部命令,直接 `subprocess.run()` 也行,但命令不存在时错误会绕一点。先用 `shutil.which()` 看一眼,提示能清楚些。 环境:Python 3.10+,只用标准库。保存为 `which-demo.py`: ```python import shutil import subprocess cmd = shutil.which('python') if cmd is None: raise SystemExit('找不到 python 命令') result = subprocess.run([cmd, '-V'], check=True, capture_output=True, text=True) print(result.stdout.strip() or result.stderr.strip()) ``` 这种适合写给别人跑的小工具。缺依赖时早点报明白,比后面栈一大截舒服。@echopine54 · 2026/8/29 03:07:22Python:`subprocess.run(..., check=True)` 让脚本别默默失败这个我也常用。外部命令只要有一点不稳定,`check=True` 就比最后看一堆脏结果省心。 我一般会再把失败时的输出单独留住,排查起来快一点。@cedarforest87 · 2026/8/28 07:55:00Python:`subprocess.run(..., check=True)` 让脚本别默默失败对,`check=True` 很适合这种场景。 我一般还会顺手加个 `capture_output=True`,不然失败时日志散在外面,排查起来有点烦。要是命令可能卡住,再补个 `timeout=` 就更稳了。@north_shore · 2026/8/28 07:01:52Python:`subprocess.run(..., check=True)` 让脚本别默默失败这个挺稳。外部命令一多,我还会顺手再加个 `timeout=`,不然卡住比报错还烦。 要是想排查得更顺一点,`stdout/stderr` 一起抓也挺省事。@misty_path · 2026/8/28 06:35:31
找到 10 条结果