繁体   English   中英

Python:如何将命令行arg作为字符串而不是元组传递?

[英]Python: How to pass command-line arg as string instead of tuple?

在我的Django站点中,我正在编写一个管理命令来为所有模型或指定模型在固定装置中生成示例数据。

第一个(也是唯一一个)位置arg应该指定要处理的app.model,或“ all”指定所有模型。

我遇到的问题是arg是一个元组,当我打印它时,它会显示单个字符作为元组的每个元素。

这是我的代码(就显示arg而言):

    def add_arguments(self, parser):
        parser.add_argument(
            'args', type=str, metavar='app.model', nargs='?', default='all',
            help='Model in the form: app.model (example: clients.client)')

    def handle(self, *args, **kwargs):
        self.model = args

        print('args-type:', type(args))
        print('model-type:', type(self.model))
        print('model:', self.model)

请注意,我已将type=str指定为add_argument选项。

当我尝试以下命令行时:

docker-compose exec api python manage.py gen_fixtures

...我得到以下输出:

args-type: <class 'tuple'>
model-type: <class 'tuple'>
model: ('a', 'l', 'l')

如果在命令行上指定“ all”,则相同。 如果我尝试这个:

docker-compose exec api python manage.py gen_fixtures clients.client

...我得到以下输出:

args-type: <class 'tuple'>
model-type: <class 'tuple'>
model: ('c', 'l', 'i', 'e', 'n', 't', 's', '.', 'c', 'l', 'i', 'e', 'n', 't')

我知道,如果我用单个值(例如my_var = ('one value',)初始化代码中的元组my_var = ('one value',)而忘记添加结尾逗号,则将得到与上述相同的结果。 但是在这种情况下,元组是在解析器中创建的,这超出了我的控制范围。 为什么type=str没有作用?

我只想要一个arg作为字符串。 我怎样才能做到这一点?

您在这里混淆了两件事。 *args是将变量参数传递给函数的内置Python方法; 它永远是一个元组。 它与您恰好也称为args的命令行选项无关。 您需要从第二个参数中提供的字典中获取该信息。

def handle(self, *args, **kwargs):
    self.model = kwargs['args']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM