Python argparse-使用引号
我希望“arg1”“arg2”周围的引号不在同一个列表中被视为单独的参数,“arg1 arg2”被视为单独的参数,但在同一个列表中 test.py取自 运行1 产出1Python 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
['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']]