【发布时间】:2016-02-07 10:47:42
【问题描述】:
我的要求是传递一个元组作为命令行参数,如
--data (1,2,3,4)
我尝试使用argparse 模块,但如果我这样通过,它会接收为字符串'(1,2,3,4)'。我尝试将type=tuple 提供给argparse.add_argument,但在这里没有用。
我是否必须添加一个新的类型类并将其传递给add_argument 的类型参数?
更新
我根据答案尝试了ast.literal_eval。感谢那。但它在结果中给出了空格,如下所示。
(1,2,3,4)
<type 'str'>
(1, 2, 3, 4)
<type 'tuple'>
【问题讨论】:
-
每个重复项,
ast.literal_eval将是一个合适的type参数 -
根据
argparse文档,type必须是一个函数 (callable),它接受一个简单的字符串并将其转换为所需的对象。tuple('(1,2)')接受一个字符串,但拆分为字符,例如('(', '1', ',', '2', ')')。还要小心你的用户给你--data (1, 2, 3,4)。外壳在空白处分裂。 -
重复链接与解析
'(1,2)'之类的字符串有关,但没有解决问题的argparse方面。 -
stackoverflow.com/a/18003926/901925 建议使用
json.loads来解析看起来像字典和列表(但不是元组)的字符串。 -
为什么不将参数存储为字符串并将其传递给
eval()以将其转换为元组。
标签: python tuples command-line-arguments argparse