Как применить YAPF для каждого файла Python в каталоге?

Я установил Google yapf (еще один форматер Python) в рамках проекта и попытался отформатировать все мои файлы Python на месте, однако я получил следующую ошибку:

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

почему yapf неспособен понять шаблон? Что я должен сделать, чтобы добиться того же?

РЕДАКТИРОВАТЬ Я также попытался 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

что странно, так как я не читаю со стандартного ввода

1 ответ

Решение

Первая проблема заключается в том, что раскрытие подстановочного знака происходит в оболочке еще до запуска командной строки. Когда вы бежите:

somecommand *.py

Эта команда не знает, что вы ввели *, Все, что он знает, это то, что вы передали список файлов. Другими словами, yapf неспособен понять образец, потому что он никогда не видит образец.

Вторая проблема заключается в том, что ** не является допустимым шаблоном подстановки файла оболочки. Это семантически эквивалентно *так работает yapf -ir files **.py будет обрабатывать только .py файлы, содержащиеся в вашем текущем каталоге и внутри files каталог.

Если вы хотите запустить yapf Рекурсивно для всех ваших файлов Python, начиная с вашего текущего каталога, есть несколько решений. Самое простое, вероятно, это:

yapf -ir .

Это обработает все .py файлы в вашем текущем каталоге и его дочерних. Если вы хотите больше контроля над выбором файлов, используйте find а также xargs:

find . -name '*.py' -print0 | xargs -0 yapf -i
Другие вопросы по тегам