将argparse参数设置为默认开关

时间:2015-01-26 15:24:58

标签: python python-2.7 argparse

我的test.py文件包含以下说明:

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

我希望能够在不明确设置“query”参数(“ - q”或“--query”)的开关的情况下运行脚本,即如果我打电话:

python test.py something

“某事”将被自动指定为查询参数。

这可能吗?

2 个答案:

答案 0 :(得分:1)

这样的事情会起作用:

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)) 

答案 1 :(得分:1)

使用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',但是当位置在末尾“解析”时,它会被位置默认值覆盖。

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