假设我有一个使用argparse处理命令行参数/选项的程序。下面将打印“帮助”信息:
./myprogram -h
or:
./myprogram --help
但是,如果我不带任何参数运行脚本,它什么都不会做。我想要它做的是在不带参数地调用它时显示用法消息。怎么做呢?
假设我有一个使用argparse处理命令行参数/选项的程序。下面将打印“帮助”信息:
./myprogram -h
or:
./myprogram --help
但是,如果我不带任何参数运行脚本,它什么都不会做。我想要它做的是在不带参数地调用它时显示用法消息。怎么做呢?
当前回答
如果您的命令是用户需要选择某些操作的命令,则使用互斥组required=True。
这是对pd321给出的答案的扩展。
import argparse
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument("--batch", action='store', type=int, metavar='pay_id')
group.add_argument("--list", action='store_true')
group.add_argument("--all", action='store_true', help='check all payments')
args=parser.parse_args()
if args.batch:
print('batch {}'.format(args.batch))
if args.list:
print('list')
if args.all:
print('all')
输出:
$ python3 a_test.py 用法:a_test.py [h](——批pay_id | - |列表) A_test.py: error:参数之一——batch——list——all是必需的
这只是基本的帮助。其他的一些答案会给你充分的帮助。但至少你的用户知道他们可以做-h
其他回答
有一对带有sys。argv[1:](一个非常常见的Python习语,用于引用命令行参数,即sys. argv[1:])。Argv[0]脚本的名称),可以完成这项工作。
第一个是不言自明的、干净的、python式的:
args = parser.parse_args(None if sys.argv[1:] else ['-h'])
第二个问题有点棘手。结合前面评估的事实,一个空列表是False与True == 1和False == 0等价,你得到:
args = parser.parse_args([None, ['-h']][not sys.argv[1:]])
也许括号太多了,但如果之前做了参数选择就很清楚了。
_, *av = sys.argv
args = parser.parse_args([None, ['-h']][not av])
用nargs设置位置参数,检查位置参数是否为空。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('file', nargs='?')
args = parser.parse_args()
if not args.file:
parser.print_help()
参考Python nargs
最简洁的解决方案是手动传递默认参数,如果没有在命令行中给出:
parser.parse_args(args=None if sys.argv[1:] else ['--help'])
完整的例子:
import argparse, sys
parser = argparse.ArgumentParser()
parser.add_argument('--host', default='localhost', help='Host to connect to')
# parse arguments
args = parser.parse_args(args=None if sys.argv[1:] else ['--help'])
# use your args
print("connecting to {}".format(args.host))
如果调用w/o参数,这将打印完整的帮助(而不是简短的用法)。
对于argparse,你可以使用ArgumentParser.print_usage():
parser.argparse.ArgumentParser()
# parser.add_args here
# sys.argv includes a list of elements starting with the program
if len(sys.argv) < 2:
parser.print_usage()
sys.exit(1)
打印帮助 ArgumentParser.print_usage(文件=没有) 打印关于如何在命令行上调用ArgumentParser的简要描述。如果file为None,则sys。假设是Stdout。
如果你必须为脚本运行指定参数,使用ArgumentParser所需的参数,如下所示
parser.add_argument('--foo', required=True)
如果脚本在没有任何参数的情况下运行,Parse_args()将报告错误。