-h
работает, вызывая определенное действие типа _HelpAction
, как если бы оно было определено чем-то вроде
parser.add_argument('-h', action='help')
Это действие вызывает (в конце концов) sys.exit
, и поэтому обходит остальныеАлгоритм разбора, что делает вопрос о необходимых аргументах спорным.
Вы можете определить свое собственное настраиваемое действие TestAction
, создав подкласс Action
(подробности см. https://docs.python.org/3/library/argparse.html#action), а затем определив --test
с помощью
class TestAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
""" Run your tests and exit the script here """
parser.add_argument("--test", action=TestAction)
В качестве альтернативы определите отдельные подкоманды test
и run
, чтобы только у подкоманды run
были обязательные аргументы, а подкоманда test
просто запускает ваши тесты и существует.
Тем не менее, лучшее, что нужно сделать, - это отделить запуск ваших модульных тестов от запуска вашего скрипта.Нет оснований даже развертывать ваши модульные тесты в среде, где вы ожидаете запустить свой скрипт.Используйте отдельный сценарий запуска тестов (или что-то вроде nosetests
) для запуска ваших тестов без запуска самого сценария.