Python argparse-使用引号

Python argparse-使用引号,python,argparse,Python,Argparse,我希望“arg1”“arg2”周围的引号不在同一个列表中被视为单独的参数,“arg1 arg2”被视为单独的参数,但在同一个列表中 test.py取自 运行1 产出1 ['arg arg2'] 我想这没问题吧?但是arg和arg2被认为是独立的参数吗 运行2 产出2 ['arg', 'arg2'] 在同一个列表中,但它们是否被视为单独的参数?我需要它们是这样的: ['arg'] ['arg2'] python test.py--nargs“arg arg2”提供解析器(通过sys.argv

我希望“arg1”“arg2”周围的引号不在同一个列表中被视为单独的参数,“arg1 arg2”被视为单独的参数,但在同一个列表中

test.py取自

运行1

产出1

['arg arg2']
我想这没问题吧?但是arg和arg2被认为是独立的参数吗

运行2

产出2

['arg', 'arg2']
在同一个列表中,但它们是否被视为单独的参数?我需要它们是这样的:

['arg'] ['arg2']
python test.py--nargs“arg arg2”
提供解析器(通过
sys.argv[1:][/code>)
['--nargs',arg arg2']
。解析器将参数字符串
'arg arg2'
放入
args
命名空间中。因为
nargs='*'
它被放在一个列表中

因此,
args=parser.parse_args()
应该产生

Namespace(nargs = ['arg arg2'])
python test.py--nargs“arg”“arg2”
的不同之处在于shell将两个字符串分开,
['--nargs',arg.'arg2']
,解析器将这两个字符串都放入该列表中

打印
sys.argv
以查看解析器必须处理的内容通常会有所帮助

要获得
['arg']['arg2']
我认为您必须使用

parser.add_argument('--nargs', nargs='*', action='append')

这样,每个
--nargs
事件都会创建其参数的列表(因为
*
),并将其附加到Namespace属性。实际上,它会生成一个列表:

[['arg'], ['arg2']]

shell决定参数的分隔方式,而不是python。大多数shell将考虑<代码>“ARGARG2”< /C> >为一个参数,并将其传递给Python。如果要将单词分隔为单独的参数,则必须使用通常的方法(例如使用
str.split()
)。@Roelant格式:“arg1”“arg2”应为两行中的两个单独的arg,而“arg1 arg2”应为同一行中的两个单独的arg。@glibdud感谢您的澄清。既然我想在空白处拆分,str.split()就足够了。但是,在正确执行时遇到问题。谢谢。不过我不想要一张清单。似乎str.split()就足够了。知道如何在解析器中实现它。添加_参数('--nargs',nargs='*')?解析后我只会使用列表理解。
Namespace(nargs = ['arg arg2'])
parser.add_argument('--nargs', nargs='*', action='append')
python test.py --nargs "arg" --nargs "arg2"
[['arg'], ['arg2']]