解析器总是将参数作为列表吗?

时间:2017-05-20 03:55:36

标签: python django

Python版本:Python 3.5.1

Django版本:Django 1.10.2

我正在尝试编写自己的django自定义命令,我注意到要接受一个参数,它总是以列表形式结束。

请参阅https://docs.python.org/3/library/argparse.html

请注意,整数的参数是整数列表。

我希望有一个参数,它接受以明显str格式编写的目录的相对路径或绝对路径。

我的问题是:

  1. 甚至可以只接受参数作为解析器对象的单个str对象吗?
  2. 如果可能,我需要更改什么?
  3. 我目前的代码是

    def add_arguments(self, parser):
        parser.add_argument('path', nargs='+', type=str)
    
        # Named (optional) arguments
        parser.add_argument(
            '--whiteware',
            action='store_true',
            dest='whiteware',
            default=True,
            help='Affects whiteware variants only',
        )
    
    def handle(self, *args, **options):
        directory_in_str = options['path']
    
        print(directory_in_str)
    

1 个答案:

答案 0 :(得分:1)

您的问题在于创建命令行参数path的方式。

从文档中

  

nargs - 应该使用的命令行参数的数量。

nargs='+'表示一个或多个空格分隔的参数,这些参数将由argparse转换为列表。

现在,如果你期待一个字符串,你可以这样做:

parser.add_argument('path', type=str) #type is str by default, no need to specify this explicitly.

请注意,当您想要限制选择类型等时,nargs非常有用。

例如:

parser.add_argument('path', nargs='+', choices=['a', 'b', 'c'])

这样,您可以提供一系列选项,这些选项可作为消费列表使用。

甚至:

parser.add_argument('path', choices=['a', 'b', 'c'])

如果您想将单个选项作为字符串。

您可以在argparse options here in the documentation

上阅读更多内容