Python: передать общий словарь в качестве аргументов командной строки
У меня есть script, который должен принимать имя файла и набор пар ключ = значение. Набор пар ключ = значение не определен. Они зависят от файла, который был передан.
например:
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 или мне нужно создать собственный парсер?
Ответы
Ответ 1
Это должно быть довольно легко разобрать. Использование вспомогательных библиотек было бы сложно, не зная ключей заранее. Имя файла находится в 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
, прежде чем пытаться извлечь имя файла.
Ответ 2
Надеюсь, что это поможет, вместо передачи dict вы можете передать "escaped" json string в качестве аргумента командной строки
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"