如果传递了 -h 参数,为什么我的脚本会在 parse_args() 处停止?
Why does my script stop at parse_args() if -h argument is passed?
我尝试 运行 以下脚本来了解 command.parse_args()
返回的名称空间中的内容。
#!/usr/bin/python3
import argparse
command = argparse.ArgumentParser()
command.add_argument("test")
print("test1")
args = command.parse_args()
print("test2")
print(args)
如果我 运行 一个 "complete" 命令(如 ./test.py 1
)一切正常并且显示命名空间。
但是如果我做类似 ./test.py -h
的事情,它会失败并停止在 args =
command.parse_args()
,print("Test2")
不会被调用。
我没有发现任何错误。但是脚本的其余部分没有被解释。
为什么?
这种方式有什么错误吗?
./test.py -h
是否由于某种原因无效(即使它看起来工作正常)?
args = command.parse_args()
会导致脚本结束前退出吗?
默认情况下,help options are added 到参数解析器。然后,当传递帮助参数时,调用帮助操作打印帮助,然后结束程序执行。
如果您不希望这种情况发生,您需要将 add_help
参数设置为 False
,但这也会阻止参数解析器提供帮助功能。
如果您实际查看打印的帮助文本,退出行为非常明显:
-h, --help show this help message and exit
查看 argparse.py 源代码。
https://github.com/python/cpython/blob/master/Lib/argparse.py#L1007
argparse 有默认的帮助-h
,这是一个显示帮助和退出的动作。
_HelpAction.__call__
处理这个动作。
我尝试 运行 以下脚本来了解 command.parse_args()
返回的名称空间中的内容。
#!/usr/bin/python3
import argparse
command = argparse.ArgumentParser()
command.add_argument("test")
print("test1")
args = command.parse_args()
print("test2")
print(args)
如果我 运行 一个 "complete" 命令(如 ./test.py 1
)一切正常并且显示命名空间。
但是如果我做类似 ./test.py -h
的事情,它会失败并停止在 args =
command.parse_args()
,print("Test2")
不会被调用。
我没有发现任何错误。但是脚本的其余部分没有被解释。
为什么?
这种方式有什么错误吗?
./test.py -h
是否由于某种原因无效(即使它看起来工作正常)?
args = command.parse_args()
会导致脚本结束前退出吗?
默认情况下,help options are added 到参数解析器。然后,当传递帮助参数时,调用帮助操作打印帮助,然后结束程序执行。
如果您不希望这种情况发生,您需要将 add_help
参数设置为 False
,但这也会阻止参数解析器提供帮助功能。
如果您实际查看打印的帮助文本,退出行为非常明显:
-h, --help show this help message and exit
查看 argparse.py 源代码。
https://github.com/python/cpython/blob/master/Lib/argparse.py#L1007
argparse 有默认的帮助-h
,这是一个显示帮助和退出的动作。
_HelpAction.__call__
处理这个动作。