我想知道是否有一种方法可以使用来自argparse的元数据从其他地方抓取。例如,有一个-f FILE选项和一个-d DIR选项。我可以使用-d命令获取文件吗?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)
我知道这段代码是错误的(字符串没有元变量和选项不得到设置,直到parser.parse_args()运行),但我有几个其他的时候,我只想抓住元变量,而没有一堆:
meta_file = 'FILE'
meta_dir = 'DIR'
meta_inquisition = 'SURPRISE'
漂浮。
谢谢。编辑:
s/add_option add_argument/
在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
的读数:
usage: ipython [-h] [-f FILE] [-d DIR]
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
我删除了action="store"
,因为这是默认值(没有什么大不了的)。
我将help
的值改为使用%(metavar)s
。这用于合并各种action
属性。最常用于default
.
From argparse
docs:
帮助字符串可以包含各种格式说明符,以避免重复诸如程序名称或参数默认值之类的内容。可用的说明符包括程序名、%(prog)s和add_argument()的大多数关键字参数,例如%(default)s、%(type)s等:
我使用action1.metavar
将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'
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)
但是这只是普通的Python代码
根据help
参数的文档,帮助文本可以包含格式说明符,如%(default)s
, %(type)s
等。你可以写%(metavar)s
,它将被扩展为元变量的值(或者None
,如果没有指定)。
我不认为有办法抓取另一个参数元变量