Передача аргументов словаря через командную строку и доступ к ним в скрипте python - PullRequest
2 голосов
/ 22 марта 2020

Я пытаюсь передать словарь, состоящий из аргументов, в сценарий python, а затем использовать этот словарь в сценарии. Я сохраняю словарь в переменной окружения воздушного потока.

Например, сценарий должен запускаться в командной строке следующим образом: python test.py dict_name

Имя_диапазона выглядит следующим образом:

{ "path": "firstlevel/secondlevel", "name": "xyz", "key": "12345" }

И я Мне нужно использовать ключи из вышеупомянутого словаря вместо фактических значений в моем python скрипте, т.е. test.py

Я попытался использовать data = sys.argv [1] в функции init класса. Но это дает мне список, а не словесно. И таким образом, использование возможностей словаря невозможно.

def __init__(self, data = sys.argv[1]):
    print data

Я создаю экземпляр объекта, подобного этому,

f = class_name(sys.argv[1:])

Вывод, который я получаю,

['path', ':', 'firstlevel/secondlevel', 'name', ':', 'xyz', 'key', ':', '12345']

Моя цель - получить данные в виде словаря, а не списка в скрипте python, потому что я хочу заменить значения в моем скрипте python только ключами.

Вот пример использования для объяснить мою точку зрения в более четкой форме.

fun(name = 'xyz', key = 12345)

To

fun(sys.argv['name'], sys.argv['key'])

Traceback

Traceback (последний вызов последний) : Файл «test.py», строка 13, в objec_name = class_name (sys.argv [1:]) Файл «test.py», строка 6, в init data = json .loads (sys.argv [1] ) Файл "C: \ Users \ Sarve sh Pandey \ AppData \ Local \ Programs \ Python \ Python38 \ lib \ json_init_.py", строка 357, в загрузках возвращает файл _default_decoder.decode (s) "* ​​1042 * : \ Users \ Sarve sh Pandey \ AppData \ Local \ Programs \ Python \ Python38 \ lib \ json \ decoder.py ", строка 337, в файле decode obj, end = self.raw_decode (s, idx = _w (s, 0) .end ())

1 Ответ

0 голосов
/ 22 марта 2020

JSON - или JavaScript Представление объектов - это один из способов получения Python объектов и их преобразования в строковое представление, подходящее для передачи на несколько языков.

python saver.py '{"names": ["J.J.", "April"], "years": [25, 29]}'

В вашем скрипте python сделайте следующее:

import json
data=json.loads(argv[1])

Это вернет вам словарь, представляющий данные, которые вы хотели передать.

Затем вы можете применить к функции, как вы и предполагали.

fun(data['name'], data['key'])

Редактировать: Вам также необходимо рассмотреть вопрос о разборе

Например,

, если вы запустите print sys.argv[1], вы, вероятно, получите '{favorited: который модуль json не может декодировать в объект json.

попробуйте экранировать ваши внутренние кавычки, чтобы он передавался как 1 аргумент, например:

"{"\""favorited"\"": false, "\""contributors"\"": null}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...