Мне нужно передать словарь в модуль python через командную строку. Я не нашел способа заставить Python сотрудничать. Ниже приведен очень упрощенный пример того, что я хотел бы выполнить sh. Это приводит к следующей ошибке TypeError: _get_positional_kwargs() missing 1 required positional argument: 'dest'
. Добавление аргумента dest
в строку add_argument приводит к TypeError: __init__() got an unexpected keyword argument 'kwargs'
, что указывает на печальную возможность того, что argparse просто не сможет принять словарь в качестве аргумента. Является ли файл pickle единственной возможностью для передачи словарей туда и обратно из вызовов командной строки?
def run(**kwargs):
for i in kwargs.items():
print(f'{i}: {kwargs[i]}')
# ...some code to manipulate the dictionary
return kwargs
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description="Test script")
parser.add_argument(kwargs='**', description='A dictionary to be manipulated and returned')
args = parser.parse_args()
x = run(args)
pass
Дополнительная информация - я знаю, что могу передать список в *nargs
аргумент с командной строкой, которая содержит аргументы, разделенные пробелом, но мне нужно сделать что-то подобное со словарем.
ОБНОВЛЕНИЕ - ЧТО РАБОТАЛО: Основываясь на полезном вводе @chepner, я смог заставить его работать с решением json, которое он упомянул в своем ответе. На моей платформе Windows мне пришлось удалить все пробелы из строки словаря, и в последней строке командной строки требуются escape-символы.
{\"this\":1,\"is\":2,\"a\":5,\"dictionary\":7}