跳到内容

replace-stdout-stderr (UP022)

源自 pyupgrade linter。

有时提供修复。

作用

检查 subprocess.run 的使用,该使用会将 stdoutstderr 发送到管道。

为什么这不好?

从 Python 3.7 开始,subprocess.run 有一个 capture_output 关键字参数,可以设置为 True 来捕获 stdoutstderr 输出。 这等同于将 stdoutstderr 设置为 subprocess.PIPE,但更明确且更易读。

示例

import subprocess

subprocess.run(["foo"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

建议改为

import subprocess

subprocess.run(["foo"], capture_output=True)

修复安全性

此规则的修复被标记为不安全,因为将 stdout=subprocess.PIPEstderr=subprocess.PIPE 替换为 capture_output=True 可能会删除附加到原始参数的注释。

参考