【问题标题】:How to accept lists of multiple elements as command line arguments? [duplicate]如何接受多个元素的列表作为命令行参数? [复制]
【发布时间】:2019-05-22 05:12:45
【问题描述】:

所以我有一个这样的解析器:

parser.add_argument('-f', '--foo', metavar='foo', type=ast.literal_eval, default=[], help="Foo")

如果用户愿意,我需要让他们输入多个值:

$ python3 foo.py -f [0x01, 0x56, 0xff] -a blah -b blah ...

但每当我尝试列表中的多个值时,我都会收到 EOF 错误:

...
File "<unknown>", line 1
[0x01,
     ^
SyntaxError: unexpected EOF while parsing

设置解析器以处理此类问题的正确方法是什么?

【问题讨论】:

  • 你试过python3 foo.py -f "[0x01, 0x56, 0xff]" -a blah -b blah ..吗?
  • shell 在空格处分割参数。如果您不想将它们视为分隔符,请引用您的空格。
  • @PatrickArtner 最好使用正确的 argparse 选项
  • @Chris_Rands 这里的问题是外壳在空格处分裂 - 我确实看得更远 - 你的欺骗更好。
  • 查看sys.argv 以了解解析器必须处理的内容。它是由 shell 拆分的字符串列表。您的 type 函数一次处理一个字符串。

标签: python linux list command-line argparse


【解决方案1】:

只需将其包裹在"":

python3 foo.py -f "[0x01, 0x56, 0xff]" -a blah -b blah ...

然后让foo.py(在这种情况下)解析它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2022-11-25
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多