Передача аргументов командной строки в python unittests - PullRequest
0 голосов
/ 22 января 2020

Есть ли способ сделать что-то подобное в python?

$ python tests/tests.py verbose

# in the file
if __name__ == '__main__':
   unittest.main()

По сути, я хочу иметь возможность анализировать посторонние аргументы sys из командной строки, но когда я пытаюсь, я получаю что-то например:

AttributeError: модуль ' main ' не имеет атрибута 'verbose'

Ответы [ 2 ]

1 голос
/ 23 января 2020

Просто введите --verbose из командной строки, например:

python tests/tests.py --verbose

Когда вызывается инфраструктура unittest с unittest.main(), она все равно будет понимать те же аргументы командной строки, что и при работе вызывается с python -m unittest как задокументировано здесь . Чтобы включить многословие, можно выбрать флаг (с двумя дефисами) --verbose. Нет причин вносить какие-либо изменения в ваш код. Следующее - это все, что вам нужно:

if __name__ == '__main__':
   unittest.main()

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

0 голосов
/ 22 января 2020

Один из способов сделать это - обработать системные аргументы, прежде чем они будут переданы unittest.main(). Например:

if __name__ == '__main__':
    if 'verbose' in sys.argv:
        sys.argv = sys.argv[:-1]  
    else:
        logging.disable(1e6) # suppress logging
    unittest.main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...