python argparse传递分隔列表

时间:2014-06-02 18:22:03

标签: python argparse

以下内容:

parser.add_argument("-l", "--library", type=str, nargs="*", dest="scanLibrary")

可能会出现传递的名称列表可能包含空格的情况。 argparse正在打破空白列表,所以

mything.py -l test of foo, game of bar, How I foo bar your mother

让我知道:

scanLibrary=['test', 'of', 'foo,', 'game', 'of', 'bar,', 'How', 'I', 'foo', 'bar', 'your', 'mother']

那么如何让argeparse使用我选择的分隔符?

更新: 根据Martijn Pieters的建议,我做了以下改动:

parser.add_argument("-l", "--library", type=str, nargs="*", dest="scanLibrary")
print args.scanLibrary
print args.scanLibrary[0].split(',')

结果如下:

mything.py -l "test of foo, game of bar, How I foo bar your mother"
['test of foo, game of bar, How I foo bar your mother']
['test of foo', ' game of bar', ' How I foo bar your mother']

我可以很容易地清理领先的空间。感谢

3 个答案:

答案 0 :(得分:1)

你不能。 shell 是在这里进行解析的;它将进程的参数作为解析列表传递。

为防止这种情况,请引用您的论点:

mything.py -l "test of foo, game of bar, How I foo bar your mother"

答案 1 :(得分:1)

由于50次重复,无法对您的问题发表评论。我只是想说你可以使用:

'   some string '.strip()

获得:

'some string'

答案 2 :(得分:0)

在我看来,一种更好的方法是使用lambda函数。这样,您就不必对列表进行后处理,从而使代码保持整洁。您可以按以下步骤完成此整洁的小技巧:

# mything.py -l test of foo, game of bar, How I foo bar your mother

parser.add_argument("-l",
                    "--library",
                    type=lambda s: [i for i in s.split(',')],
                    dest="scanLibrary")

print(args.scanLibrary)

# ['test of foo', 'game of bar', 'How I foo bar your mother']