我看到有关使用argparse库将字典和列表传递给Python的问题。示例都展示了我的Python代码是什么样子的,但没有展示它们在命令行上的样子。我需要在哪里使用大括号、中括号和引号?
所以,如果我想要参数--my_dict和--my_list,我应该如何在命令行上指定它们?
这是我想要实现的核心:
Python foo.py --my_dict="{'Name': 'Zara', 'Class': 'First'}" --my_list="['a', 'b', 'c']"
您可以使用ast.literal_eval
将用户输入的字符串安全地转换为Python字典和列表:
import argparse
import ast
parser = argparse.ArgumentParser()
parser.add_argument('--my_dict', type=ast.literal_eval)
parser.add_argument('--my_list', type=ast.literal_eval)
args = parser.parse_args()
print(args)
运行中
% python script.py --my_dict="{'Name': 'Zara', 'Class': 'First'}" --my_list="['a', 'b', 'c']"
Namespace(my_dict={'Name': 'Zara', 'Class': 'First'}, my_list=['a', 'b', 'c'])
sys.argv[1:]
可以看到 shell 传递给你的脚本的字符串列表。你需要足够的引号来防止 shell 分割这些字符串。你需要使用括号或大括号取决于你打算如何解析结果字符串。JSON 路线提供了最大的灵活性。 - hpauljnargs ='+'
来处理列表?这样,您就可以输入“--mylist a b c”,而无需添加引号或括号。 - hpaulj--student Zara First
这样使用,然后从生成的元组构建适当的字典。 - chepneraction='append'
,并多次使用它,每个学生使用一次。 - hpaulj