Python: передать общий словарь в качестве аргументов командной строки - PullRequest
10 голосов
/ 08 апреля 2011

У меня есть скрипт, который должен принимать имя файла и набор пар ключ = значение.Набор пар ключ = значение не определен.Они зависят от файла, который был передан.

Например:

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 или мне нужно создать свой собственный анализатор?

Ответы [ 2 ]

15 голосов
/ 08 апреля 2011

Это должно быть довольно легко разобрать самому. Использование вспомогательных библиотек будет затруднено, если заранее не знать ключи. Имя файла находится в 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, прежде чем пытаться извлечь имя файла.

0 голосов
/ 13 февраля 2017

Надеюсь, это поможет, вместо того, чтобы передать dict, вы можете передать "экранированную" строку 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"

...