Python可以访问argparse选项的metavar吗?

时间:2014-06-05 19:50:53

标签: python argparse

我想知道是否有办法使用来自其他地方的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 /

2 个答案:

答案 0 :(得分:3)

argparse add_argumentAction。此方法返回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等:

我正在使用FILEaction2放入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。