Как применить 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