我的test.py
文件包含以下说明:
parser = argparse.ArgumentParser()
parser.add_argument("-p", "--parameter", default="latest")
parser.add_argument("-q", "--query")
我希望能够在不明确设置“query”参数(“ - q”或“--query”)的开关的情况下运行脚本,即如果我打电话:
python test.py something
“某事”将被自动指定为查询参数。
这可能吗?
答案 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'值覆盖。