可以访问argparse选项的元变量



我想知道是否有一种方法可以使用来自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.metavarFILE放在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,如果没有指定)。

我不认为有办法抓取另一个参数元变量

相关内容

  • 没有找到相关文章

最新更新