Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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是否忽略连接的args?_Python_Python 2.7_Argparse - Fatal编程技术网

Python argparse是否忽略连接的args?

Python argparse是否忽略连接的args?,python,python-2.7,argparse,Python,Python 2.7,Argparse,我对Python2.7中的argparse有一个问题。我试图忽略未使用的参数,因为我有一个批处理文件,该文件将参数传递给几个Python脚本,不同的脚本需要提取不同的参数 例如: import argparse parser = argparse.ArgumentParser() parser.add_argument('-a', action='store_true') 如果我单独指定每个参数,它可以正常工作: args, unknown = parser.parse_known_args(

我对Python2.7中的argparse有一个问题。我试图忽略未使用的参数,因为我有一个批处理文件,该文件将参数传递给几个Python脚本,不同的脚本需要提取不同的参数

例如:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-a', action='store_true')
如果我单独指定每个参数,它可以正常工作:

args, unknown = parser.parse_known_args(['-a',' -b'])
print args
# Namespace(a=True)
print unknown
# [' -b']
但如果我以串联格式指定它们:

args, unknown = parser.parse_known_args(['-ab'])
我明白了:

: error: argument -a: ignored explicit argument 'b'
但是,如果我将这一行添加到上面的代码中:

parser.add_argument('-b', action='store_true')
那么这就行了:

args, unknown = parser.parse_known_args(['-ab'])
print args
# Namespace(a=True, b=True)
print unknown
# []

因此,我似乎只能对已知参数使用串联格式。我想知道是否有一种方法可以使用串联格式,在这种格式中,它可以只提取它知道的参数?我能想到的唯一替代方法就是在所有Python脚本中定义所有参数,但这似乎会污染-h帮助显示?

我以前没有遇到过这个问题,但我可以想象为什么会发生这种情况。但我必须检查代码以确定细节

“-ab”被传递给名为
consume\u optional
的嵌套函数。这有特殊的代码来识别和吐出这些连接的参数。它识别'-a'。因为它不接受任何参数,所以它假定'b'表示'-b'。如果未定义'-b',则会发出此错误消息。它不会将其扔进
附加列表中

一个独立的'-b'字符串将被放入
extras
,但这发生在
consume\u optionals
函数的开头。您可能认为'-ab'和'-a-b'是同一件事,但解析路径不同,导致不同的错误

请尝试对'-b'使用
help=argparse.SUPPRESS
。这将减少帮助显示的“污染”。您可能仍然需要使用自定义的“用法”


“-ab”在定义了“-b”但没有定义“-a”的解析器中可能仍然存在问题。整个字符串将放入“附加”列表。

这就是它的工作原理。如果你看一下这个方法:它叫做
parse_KNOWN_args()
。但是参数-ab真的只是两个独立参数a和b的缩写版本,其中a是已知的,b不是?如果我使用-a-b,那么即使-b未知,它也能工作。我只想选择使用-ab,因为这种输入方式对许多管理员来说更为熟悉。对于我的解决方案,我将遵循这一点,为所有可能的参数添加条目,然后对不使用它们的脚本使用help=argparse.SUPPRESS。效果很好。