Как отложить вывод ошибки до каждого выполнения

В настоящее время я перебираю каждый .py файл в / каталоге. Для каждой итерации я вызываю pycodestyle и выхожу, как только вижу ошибку.

  1. Но я хочу видеть все сообщения об ошибках для каждого файла, даже если в каком-либо из файлов была ошибка до << Это помогает разработчику увидеть, какие строки он / она должен изменить, чтобы пройти тест (линтинг).

  2. Если ни один файл не печатает ошибку, не печатайте ошибку. << Это будет полезно для моего конвейера Jenkins.

    for file in $(find /-type d -name test -prune -o -type f -name '*.py' -print); do
        filename=$(basename $file)
        if [[ $filename != "__init__.py" ]] ; then
            echo "$file"
            pycodestyle "${file}" || exit 1 <<< This causes an error.
                       << If it passes the linting, it doesn't exit. 
        fi
    done
    

Мое решение:

Каким-то образом мне нужна логическая локальная переменная, чтобы показать, печатает ли она ошибку. В конце я могу проверить переменную и вернуть выход или нет. Но я не знаю, как это реализовать... Спасибо!

Просто избавься от || exit 1

Barmar 31.05.2019 02:47

Вам нужно, чтобы скрипт выходил с ненулевым кодом состояния, если были какие-то ошибки? Установите переменную и проверьте ее после цикла.

Barmar 31.05.2019 02:48

@Barmar Не могли бы вы ответить примером, пожалуйста?

merry-go-round 31.05.2019 02:49

Где установить переменную??? Как мне проверить это после цикла??? я не уверен

merry-go-round 31.05.2019 02:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо выхода установите переменную, которую вы проверяете в конце, чтобы выйти с правильным статусом.

status=0
for file in $(find /-type d -name test -prune -o -type f -name '*.py' ! -name '__init__.py' -print); do
    echo "$file"
    pycodestyle "${file}" || status=1
done
exit "$status"

Кроме того, вы можете отфильтровать __init__.py в команде find, поэтому вам не нужен if (то же самое я показал вам в Исключить определенный каталог, пока (команда поиска) - BASH).

Также см. Почему зацикливание вывода find является плохой практикой?

но разве exit 0 не терпит неудачу на Дженкинсе? @Бармер

merry-go-round 31.05.2019 02:52

0 — успех, ненулевое значение — неудача.

Barmar 31.05.2019 02:52

@EdMorton У вас есть ссылка на вопрос, который показывает, как правильно его реструктурировать?

Barmar 31.05.2019 03:00

чертов сценарий bash очень сложен. вероятно, сложнее, чем C.

merry-go-round 31.05.2019 03:20

а) не думайте об этом как о языке, подобном C, потому что тогда вы будете читать о том, как сделать X, вместо того, чтобы предполагать, что знаете, как сделать X, и б) используйте только сценарий оболочки (bash или другой) для создания /destroy файлы и процессы и последовательные вызовы инструментов (т. е. не пытайтесь использовать его для вещей, для которых он не предназначен), и вы обнаружите, что его относительно легко освоить, поскольку он имеет часть конструкций общего целевой язык, такой как C. Его синтаксис и семантика просто «другие», и поэтому их нужно изучать, не делая предположений о том, как вы могли бы сделать что-то подобное на каком-то другом языке.

Ed Morton 31.05.2019 03:27

@hellofanengineer Сценарии Bash обычно считаются более простыми, чем другие языки, потому что вы в основном используете команду, с которой вы уже знакомы, при интерактивной работе.

Barmar 31.05.2019 03:28

@Barmar Могу ли я перенаправить на эту проблему: stackoverflow.com/questions/56466433/…

merry-go-round 05.06.2019 20:55

Другие вопросы по теме