Если указаны недопустимые аргументы, модуль argparse предназначен для печати сообщения об использовании и описания проблемы, а затем выхода, что в точности и происходит в вашем примере.
Если вы хотите, чтобы вместо этого вы печатали справочное сообщение, вам нужно разобраться с этим делом самостоятельно.Например, этот код напечатает сообщение справки, если не будет выполнено никаких действий:
parser = argparse.ArgumentParser(description="Start or stop the server.",
epilog="If you don't know what you're doing, run. Run for your life.\n",
prog="myserver")
parser.add_argument("-p", "--port", type=int, nargs=1, default=5050,
dest="port", help="The port to run the server on.")
parser.add_argument("-f", "--fork", action="store_true", default=False,
dest="fork", help="Fork to background? Default is false.")
parser.add_argument("action", nargs="?", type=str, choices=("start","stop"),
help="Whether to 'start' or 'stop' the server.")
args = parser.parse_args()
if args.action is None:
parser.print_help()
sys.exit(1)
Если я запустил это без действий, я получу:
$ python s.py
usage: myserver [-h] [-p PORT] [-f] [{start,stop}]
Start or stop the server.
positional arguments:
{start,stop} Whether to 'start' or 'stop' the server.
optional arguments:
-h, --help show this help message and exit
-p PORT, --port PORT The port to run the server on.
-f, --fork Fork to background? Default is false.
If you don't know what you're doing, run. Run for your life.
Однако,если я запускаю это с недопустимым действием или недопустимым аргументом, то он возвращается к предполагаемому поведению модуля argparse:
$ python s.py not_valid
usage: myserver [-h] [-p PORT] [-f] [{start,stop}]
myserver: error: argument action: invalid choice: 'not_valid' (choose from 'start', 'stop')