Python:将通用字典作为命令行参数传递

Dav*_*ust 10 python command-line-arguments

我有一个脚本需要接受一个文件的名称和一组键=值对.未定义键=值对的集合.它们依赖于传入的文件.

例如:

Script.py file1 bob=1 sue=2 ben=3  # file 1 needs bob, sue, and ben

Script.py file2 mel=1 gorge=3 steve=3 # file 2 needs mel, gorge, and steve
Run Code Online (Sandbox Code Playgroud)

这是可能的argparse/optparse还是我必须构建自己的解析器?

Jud*_*den 15

这应该很容易解析自己.由于事先不知道密钥,因此使用帮助程序库会很复杂.文件名在sys.argv [1]中.您可以使用以"="字符分隔的字符串列表构建字典作为分隔符.

import sys
filename = sys.argv[1]
args = dict([arg.split('=', maxsplit=1) for arg in sys.argv[2:]])
print filename
print args
Run Code Online (Sandbox Code Playgroud)

输出:

$ Script.py file1 bob=1 sue=2 ben=3
file1
{'bob': '1', 'ben': '3', 'sue': '2'}
Run Code Online (Sandbox Code Playgroud)

这是它的要点,但你可能需要更健壮的键值对解析,而不仅仅是拆分字符串.此外,sys.argv在尝试提取文件名之前,请确保至少有两个参数.

  • 只有当键或值都不包含'='字符时,此解决方案才有效.考虑指定maxsplit = 1以确保在拆分每个arg时只返回两个值.不是防弹,但比现有解决方案更好. (4认同)
  • 更简单:`dict(arg.split('=')表示sys.argv [2:]中的arg) (2认同)
  • 不幸的是,maxsplit = 1不起作用,因为split不接受字符串的关键字. (2认同)