我使用argparse时遇到了一些问题.我希望在命令行中定义一组名称,这些名称将影响程序的行为.我尝试了以下代码段:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("allon", action='store_true', default = False,
help="Toggles all output pins to ON.")
parser.add_argument("alloff",action='store_true',
help="Toggles all output pins to OFF.")
parser.add_argument("cont", action='store_true',
help="Toggles all output pins continously on and off.")
args = parser.parse_args()
if args.allon:
do_allon()
elif args.alloff:
do_alloff()
....
Run Code Online (Sandbox Code Playgroud)
但代码的行为不是预期的.我不想对这些选项使用' - ',因为我想调用我的代码git status(没有前导' - ').
首先,如果我在没有参数的情况下调用代码,则所有参数都设置为True,而如果没有给出,我希望将它们设置为False.预期的行为如下:当呼叫为
python code.py
Run Code Online (Sandbox Code Playgroud)
当我打电话时,我想要allon, alloff和cont被设定False
python code.py alloff
Run Code Online (Sandbox Code Playgroud)
我想allon和cont要False同时alloff设置为True.
第二,当我打电话时,python code.py allon我得到了
code.py: error: unrecognized arguments: allon
Run Code Online (Sandbox Code Playgroud)
我根本不明白.我知道如何使用optparse,但是非常感谢argparse的帮助以使上述代码片段正常工作.
谢谢Alex
PS if循环只是教育,而不是实际实现.
当你看到像git status,git commit等等的命令模式时,我们正在谈论子命令.要创建子命令,argparse允许您使用子解析器,它基本上就像主解析器一样(采用命令行开关等).
像这样定义它们:
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(help='sub-command help')
allon_parser = subparsers.add_parser('allon',
help='Toggles all output pins to ON.')
allon_parser.set_defaults(func=do_allon)
alloff_parser = subparsers.add_parser('alloff',
help="Toggles all output pins to OFF.")
alloff_parser.set_defaults(func=do_alloff)
cont_parser = subparsers.add_parser('cont',
help="Toggles all output pins continously on and off.")
cont_parser.set_defaults(func=do_cont)
args = parser.parse_args()
# Call the associated `func` function
args.func()
Run Code Online (Sandbox Code Playgroud)
我已经将一个函数与每个subparser(set_defaults(func=...))相关联,因此该args结构将具有func指向所定义函数之一的属性.我们只需要调用它.
产量--help:
usage: PROG [-h] {cont,alloff,allon} ...
positional arguments:
{cont,alloff,allon} sub-command help
allon Toggles all output pins to ON.
alloff Toggles all output pins to OFF.
cont Toggles all output pins continously on and off.
optional arguments:
-h, --help show this help message and exit
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1645 次 |
| 最近记录: |