Python 如果没有位置参数,是否打印帮助?
我正在制作一个非常简单的脚本,其中包含以下参数:Python 如果没有位置参数,是否打印帮助?,python,argparse,Python,Argparse,我正在制作一个非常简单的脚本,其中包含以下参数: -p --port integer, optional, default 5050 -f --fork boolean, optional, default False action string, required, needs to be either start or stop 我已经尝试在argparse中实现了这一点,但当没有提供操作字符串时,它不会打印帮助,它只是失败了,比如: usage: __init__.py [-h] [-p
-p --port integer, optional, default 5050
-f --fork boolean, optional, default False
action string, required, needs to be either start or stop
我已经尝试在argparse中实现了这一点,但当没有提供操作字符串时,它不会打印帮助,它只是失败了,比如:
usage: __init__.py [-h] [-p PORT] [-f] {start,stop}
__init__.py: error: argument action: invalid choice: '__init__.py' (choose from 'start', 'stop')
即使我通过“开始”或“停止”,它也会失败,并显示相同的消息。这是我的密码:
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")
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", type=str, choices=("start","stop"), help="Whether to 'start' or 'stop' the server.")
我做错了什么?希望我的意图从我的代码中非常清楚 当提供无效参数时,设计用于打印使用情况消息和问题描述,然后退出,这正是示例中发生的情况 如果你想让它打印一条帮助信息,你需要自己处理这个问题。例如,如果未提供任何操作,此代码将打印帮助消息:
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')
您使用的是什么版本的Python?当我用2.7.1运行你的代码时,它运行得很好
$ ./t stop
$ ./t start
$ ./t -f start
$ ./t -f stop
$ ./t -f
usage: someprog [-h] [-p PORT] [-f] {start,stop}
someprog: error: too few arguments
$ ./t -f -p 8080
usage: someprog [-h] [-p PORT] [-f] {start,stop}
someprog: error: too few arguments
$ ./t -f -p 8080 start
有一个提示,如果在ctor中指定“prog”,可以使用init.py作为文件名覆盖它
parser = argparse.ArgumentParser(
prog="someprog",
description="Start or stop the server.",
epilog="If you don't know what you're doing, run. Run for your life.\n"
)
此外,这是打印使用,但不是长期的帮助。。你可以这样做,让事情变得更加明显
try:
parser.parse_args()
except Exception e:
print "************************"
parser.print_help()
print "************************"
您如何调用
\uuuu init\uuuuuuy.py
?不知何故,\uuuu init.py\uuuu
被作为第一个参数提供,就好像您在调用python\uuuu init\uuuuu.py
一样。您如何调用parser.parse\u args()
?如果我说parser.parse_args(['start'])
,我会返回一个名称空间
对象。糟糕的是,我传递的是sys.argv
,而不是sys.argv[1:://code>。当它以无效操作或无效参数运行时,是否可以打印帮助?