Python:将通用字典作为命令行参数传递
我有一个脚本,它需要接收一个文件名和一组键=值的对。这组键=值的对是没有固定的,它们取决于传入的文件。
比如:
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
请问用 argparse 或 optparse 这些工具能实现吗,还是我需要自己写一个解析器?
3 个回答
0
这里有一个例子:
例子 1:
# runline argument is : ./filename fname=sameer sname=ali age=29
import sys
l = sys.argv[1:]
print(l)
l = ['fname=sameer', 'sname=ali', 'age=29']
for i in l:
runarg = i.split('=')
d[runarg[0]] = runarg[1]
print(d)
{'fname': 'sameer', 'sname': 'ali', 'age': '29'}
例子 2
print(sys.argv[1:])
ouput: ['fname=sameer', 'sname=ali', 'age=29']
newlist = [x.split('=') for x in l]
print(newlist)
output: [['fname', 'sameer'], ['sname', 'ali'], ['age', '29']]
newdict = dict(newlist)
print(newdict)
output: {'fname': 'sameer', 'sname': 'ali', 'age': '29'}
0
希望这能帮到你,与你直接传递一个字典不同,你可以把一个“转义过的”json字符串作为命令行参数传进去。
import optparse
import json
parser = optparse.OptionParser()
parser.add_option("-t", "--test", dest="test", action="store", type="string")
options, _ = parser.parse_args()
my_dict = json.loads(options.test)
print my_dict['key1']
然后可以这样使用它:
python test.py -t "{\"key1\":\"value1\",\"key2\":\"value2\"}"
这样会输出“value1”。
20
这应该很容易理解。自己解析这些内容应该没问题。使用辅助库会比较复杂,因为你事先不知道里面的键是什么。文件名在 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
输出:
$ Script.py file1 bob=1 sue=2 ben=3
file1
{'bob': '1', 'ben': '3', 'sue': '2'}
这就是大概意思,但你可能需要更仔细地解析键值对,而不仅仅是简单地分割字符串。另外,在提取文件名之前,确保 sys.argv
至少有两个参数。