Python argparse列表输入

2024-10-02 22:36:27 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码接受mode的命令行参数,例如-m fizz和{}。正如预期的那样,这会将参数作为['fizz', 'bazz']传递给主函数(对于上面的第二个示例)。使用空格传递命令行参数似乎不友好,因此我希望argparse接受逗号分隔的列表,例如-m fizz,bazz或{}。下面的代码我可以怎么修改?谢谢!在

import agrparse
...
parser.add_argument("-m", "--mode", nargs="*",
                    default=["fizz", "bazz", "razmataz"],
                    help="Comma separated list of mode(s) to use, e.g."
                    "[\"fizz\", \"bazz\"]")
main(parser.parse_args())

Tags: 函数代码命令行importparser示例列表参数
1条回答
网友
1楼 · 发布于 2024-10-02 22:36:27

用一个简单的脚本打印sys.argv我得到

1014:~/mypy$ python echoargv.py -m ['fizz','bazz']
['echoargv.py', '-m', '[fizz,bazz]']
1014:~/mypy$ python echoargv.py -m fizz,bazz
['echoargv.py', '-m', 'fizz,bazz']
1015:~/mypy$ python echoargv.py -m fizz, bazz
['echoargv.py', '-m', 'fizz,', 'bazz']
1016:~/mypy$ python echoargv.py -m ['fizz', 'bazz']
['echoargv.py', '-m', '[fizz,', 'bazz]']
1016:~/mypy$ python echoargv.py -m fizz bazz
['echoargv.py', '-m', 'fizz', 'bazz']

这就是你的parser必须处理的。在

最后一种情况是,每个字符串都是sys.argv中的一个单独的项,这是您的nargs='*'设计用来处理的。它应该返回Namespace(mode = ['fizz','bazz'])

你有两个选择。您可以在将sys.argv传递给parser之前清除它。或者,您可以在解析后查看args.mode属性,并根据需要对其进行清理。在

例如,'fizz,bazz'可以在,上拆分。'[fizz,bazz]'需要先剥离{}。其他则需要删除多余的,'。在

您可以在自定义操作类中执行这种拆分和清理,但这不会为您节省任何工作。在


自定义type也可以用于拆分字符串

^{pr2}$

列表是嵌套的。可以使用默认的nargs,但它不允许常规的空格分隔列表。但是有一些标准的python方法可以扁平化嵌套列表。在

相关问题 更多 >