如何使用argparse与python和程序标志?

时间:2016-11-08 17:15:23

标签: python python-3.x argparse

python -i prog.py -h

当调用上面的命令时,我得到了带有回溯的预期输出和' SystemExit:0'。没有' -i'我得到了没有回溯的预期输出。为什么会发生这种情况,是否有办法在没有回溯的情况下在同一命令中使用python标志和程序标志?

2 个答案:

答案 0 :(得分:1)

使用-i标志运行Python会更改SystemExit异常的处理,该异常用于sys.exit之类的内容。通常,未被捕获的SystemExit会导致Python无声地退出。但是,在-i打开的情况下,SystemExit被视为任何其他异常,带有回溯和所有内容。

如果您希望在SystemExit开启时隐藏-i回溯,则需要明确捕捉并忽略它们。例如,

def main():
    try:
        ...
    except SystemExit:
        # Catch the exception to silence the traceback when running under python -i
        pass

if __name__ == '__main__':
    main()

答案 1 :(得分:1)

来自docs

exception SystemExit
This exception is raised by the sys.exit() function. When it is not handled, the Python interpreter exits; no stack traceback is printed.

argparse使用带有'-h'选项的SystemExit异常,并且由于您使用命令行参数'-i'进入交互模式,因此您会看到回溯。请注意,如果您实现并发送其他选项,则回溯打印:

python -i prog.py -p 80

我能想到的两个即时的“快速解决方案”(但实际上,这取决于你真正需要的是什么?)

  1. 在解析参数时输入try-except子句。

  2. python -i prog.py -h 2> / dev / null