Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python可以访问argparse选项的metavar吗?_Python_Argparse - Fatal编程技术网

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

Python可以访问argparse选项的metavar吗?,python,argparse,Python,Argparse,我想知道是否有一种方法可以使用argparse中的metavar,从其他地方获取。例如,有一个-f文件选项和一个-d目录选项。我可以借助-d获取文件.metavar或类似文件吗? 也许: 我知道这段代码是错误的(字符串没有metavar,只有运行parser.parse_args()才能设置选项),但我还有几次只想获取metavar,而不需要一堆: meta_file = 'FILE' meta_dir = 'DIR' meta_inquisition = 'SURPRISE' 四处飘荡

我想知道是否有一种方法可以使用argparse中的metavar,从其他地方获取。例如,有一个-f文件选项和一个-d目录选项。我可以借助-d获取文件.metavar或类似文件吗?
也许:

我知道这段代码是错误的(字符串没有metavar,只有运行parser.parse_args()才能设置选项),但我还有几次只想获取metavar,而不需要一堆:

 meta_file = 'FILE'
 meta_dir = 'DIR'
 meta_inquisition = 'SURPRISE'
四处飘荡

谢谢

编辑:s/add\u option/add\u argument/

根据,帮助文本可以包含格式说明符,如
%(默认)s
%(类型)s
等。您可以编写
%(metavar)s
,并将其扩展为metavar的值(或者
如果未指定,则无


我不认为有办法获取另一个人的参数metavar。

argparse
中,它是
add\u 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
帮助
内容如下:

用法:ipython[-h][-f文件][-d目录]

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'
,因为这是默认值(不过没什么大不了的)

我将
帮助
值更改为使用
%(metavar)s
。这用于合并各种
操作
属性。最常用于
默认值

帮助字符串可以包括各种格式说明符,以避免重复程序名或默认参数等内容。可用的说明符包括程序名、%(prog)s和大多数要添加_argument()的关键字参数,例如%(默认值)s、%(类型)s等:

我正在使用
action1.metavar
文件
放在
action2
的帮助行中。这不是常见用法,但我看不出有什么问题

请注意,
action1.metavar
在设置解析器时使用一次(用于创建
action2
帮助行),然后在格式化
帮助时使用一次

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编码。

我不这么认为。在“帮助”中使用“默认”参数有很多问题。这看起来很有希望。我会用我的东西检查一下。也谢谢你的add_论点。仍然在我的大脑中使用optpass。宾果。感谢您的帮助。遗憾的是,它不适用于默认的
metavar
,根据
--my option
计算:您必须明确地给出
metavar=
。Python 3.6.5.注意
s
的重要性在
%(metavar)
之后,我在阅读文档时没有理解它。
action1.help = "Name of the {} to be loaded from {}".format(action1.metavar, action2.metavar)