将 argparse 参数设置为默认开关

Set argparse argument as default switch

我的 test.py 文件有这些说明:

parser = argparse.ArgumentParser()
parser.add_argument("-p", "--parameter", default="latest")
parser.add_argument("-q", "--query")

我想在不显式设置 "query" 参数(“-q”或“--query”)开关的情况下 运行 脚本成为可能,即如果我调用:

python test.py something

"something" 自动指定为查询参数。

这可能吗?

像这样的东西会起作用:

import argparse 

parser = argparse.ArgumentParser()
parser.add_argument("-p", "--parameter", default="latest")
parser.add_argument("-q", "--query")
parser.add_argument("query_string",nargs='?', default=False)

args = parser.parse_args()

if args.parameter: 
   print("zoinks a parameter! %s" %args.parameter)
if args.query or args.query_string: 
   print("making a query %s" % (args.query or args.query_string)) 

对于 dest 值,可选参数可以设置与位置相同的属性:

parser = argparse.ArgumentParser()
parser.add_argument("-q", "--query", dest='query_string')
parser.add_argument("query_string", nargs='?', default='default')
args = parser.parse_args()

print parser.parse_args('other'.split())
# Namespace(query_string='other')    # the positional value

print parser.parse_args('-q other'.split())
# Namespace(query_string='default')   # the positional default

print parser.parse_args('more -q other'.split())
# Namespace(query_string='other')    # the optional's value

您可以对多个参数使用相同的 dest。但细微差别如何“?”处理位置会产生看似不可预测的结果。

'-q other' 的情况下,命名空间值首先设置为 'other',但当位置最后为 'parsed' 时,它会被位置默认值覆盖。

'more -q other' 示例中,位置值 'more' 被设置,然后被 '-q' 值覆盖。