跳到内容

subprocess-run-without-check (PLW1510)

源自 Pylint 代码检查工具。

修复总是可用的。

作用

检查未使用显式 check 参数的 subprocess.run 的使用情况。

为什么这不好?

默认情况下,subprocess.run 不检查它运行的进程的返回码。这可能会导致静默失败。

相反,考虑使用 check=True 在进程失败时引发异常,或显式设置 check=False 以将此行为标记为有意。

示例

import subprocess

subprocess.run(["ls", "nonexistent"])  # No exception raised.

建议改为

import subprocess

subprocess.run(["ls", "nonexistent"], check=True)  # Raises exception.

或者

import subprocess

subprocess.run(["ls", "nonexistent"], check=False)  # Explicitly no check.

修复安全性

此规则的修复被标记为对于包含 **kwargs 的函数调用是不安全的,因为向此类调用添加 check 关键字参数可能会导致重复的关键字参数错误。

参考