我想知道是否有办法使用来自其他地方的argparse中的metavar。例如,有一个-f FILE选项和一个-d DIR选项。我可以帮助-d抓住file.metavar或其他一些吗? 也许:
parser.add_argument("-f", "--file",
metavar = 'FILE',
action="store", dest="file_name", default="foo.bar",
help="Name of the {} to be loaded".format(metavar))
parser.add_argument("-d", "--dir",
metavar = 'DIR',
action = 'store', dest='file_dir', default=".",
help="Directory of {} if it is not current directory".format(option.file_name.metavar)
我知道这段代码是错误的(字符串没有metavar,而且在运行parser.parse_args()之前,选项不会被设置),但我还有一些其他时间我想要抓住没有一堆的metavar:
meta_file = 'FILE'
meta_dir = 'DIR'
meta_inquisition = 'SURPRISE'
漂浮在周围。
感谢。
编辑: s / add_option / add_argument /
答案 0 :(得分:3)
argparse
add_argument
。Action
。此方法返回action
对象(实际上是取决于action1 = parser.add_argument("-f", "--file", metavar = 'FILE',
dest="file_name", default="foo.bar",
help="Name of the %(metavar)s to be loaded")
action2 = parser.add_argument("-d", "--dir", metavar = 'DIR',
dest='file_dir', default=".",
help="Directory of %s if it is not current directory"%action1.metavar)
print(action1.metavar) # read the metavar attribute
action2.metvar = 'DIRECTORY' # change the metavar attribute
参数的子类)。您可以访问该对象的各种参数,要么使用,要么更改。例如:
help
optional arguments:
-h, --help show this help message and exit
-f FILE, --file FILE Name of the FILE to be loaded
-d DIR, --dir DIR Directory of FILE if it is not current directory
读取:
用法:ipython [-h] [-f FILE] [-d DIR]
action='store'
我删除了help
,因为这是默认值(虽然没什么大不了的。)
我将%(metavar)s
值更改为使用action
。这用于合并各种default
属性。最常见的是它用于action1.metavar
。
https://docs.python.org/3/library/argparse.html#help
帮助字符串可以包含各种格式说明符,以避免重复诸如程序名称或参数默认值之类的事情。可用的说明符包括程序名,%(prog)和add_argument()的大多数关键字参数,例如, %(默认值)s,%(类型)s等:
我正在使用FILE
将action2
放入action1.metavar
的帮助热线中。这不是一种常见用法,但我没有看到任何错误。
请注意,action2
在设置解析器时使用一次(以创建help
帮助热线),然后在格式化In [17]: action2.help
Out[17]: 'Directory of FILE if it is not current directory'
In [18]: action1.help
Out[18]: 'Name of the %(metavar)s to be loaded'
时使用。{/ p>
py3
action2
样式格式可用于help2="Directory of {} if it is not current directory".format(action2.metavar)
action2.help = help2
py2
但必须将action1
样式用于action1.help = "Name of the {} to be loaded".format(action1.metavar)
。除非你做了
action1.help = "Name of the {} to be loaded from {}".format(action1.metavar, action2.metavar)
创建两个动作后,您甚至可以使用:
{{1}}
但那只是普通的Python编码。
答案 1 :(得分:1)
根据the docs for the help
argument,帮助文字可以包含格式说明符,例如%(default)s
,%(type)s
等。您可以编写%(metavar)s
并将其扩展为值{ metavar(或None
如果没有指定)。
我认为没有办法获取另一个参数metavar。