如何将yapf应用于目录下的每个python文件



我在一个项目下安装了Google yapf(另一个python格式化程序(,并尝试将我的所有python文件格式化,但我收到了以下错误:

$ yapf -i -r files **.py
yapf: Input filenames did not match any python files

为什么雅普夫不能理解模式?我应该怎么做才能实现同样的目标?

编辑我也按照建议尝试了yapf-ir,但我得到了:

$ yapf -ir
usage: yapf [-h] [-v] [-d | -i] [-r | -l START-END] [-e PATTERN]
[--style STYLE] [--style-help] [--no-local-style] [-p] [-vv]
[files [files ...]]
yapf: error: cannot use --in-place or --diff flags when reading from stdin

这很奇怪,因为我没有从stdin 中读取

第一个问题是通配符扩展发生在shell中,甚至在命令行执行之前。运行时:

somecommand *.py

该命令不知道您键入了*。它只知道你传入了一个文件列表。换句话说,yapf无法理解该模式,因为它从未看到该模式。

第二个问题是**不是一个有效的shell文件globbing模式。这在语义上等同于*,因此运行yapf -ir files **.py将只处理当前目录和files目录中包含的任何.py文件。

如果您想从当前目录开始,在所有Python文件上递归运行yapf,那么有一些解决方案。最简单的可能是:

yapf -ir .

这将处理当前目录及其子目录中的所有.py文件。如果您想对文件的选择进行更多控制,请使用findxargs:

find . -name '*.py' -print0 | xargs -0 yapf -i

最新更新