忽略未传递的参数
Ignore not-passed args
我正在尝试根据传递的参数生成一些 JSON,但每次我 运行 脚本都会生成所有 JSON,而不仅仅是我在 CLI 中指定的那些
import json
import argparse
listOfJSONS = {
"JSON1" : "path",
"JSON2" : "path",
...
}
if __name__ == "__main__":
parser.add_argument(
"--JSON1",
action='store_true',
default=False,
help="Creates one JSON",
)
parser.add_argument(
"--JSON2",
action='store_true',
default=False,
help="Creates different JSON",
)
# repeat .add_argument() for all JSONS in the dict
args = parser.parse_args()
for arg in vars(args):
if arg in listOfJSONS .keys():
with open(listOfJSONS.get(arg), "w", encoding="utf-8") as json_file:
json_file.write(json_string)
但是当我运行
python ./JSONgenerator.py --JSON1 --JSON2
它会创建 listOfJSONS 中指定的所有 JSON,而不仅仅是我指定的两个。
非常感谢您的帮助
编辑:我也尝试在 args = parser.parse_args(sys.argv[1:])
中使用 sys.argv([1:])
但没有成功
for arg, argbool in args._get_kwargs():
if argbool and arg in listOfJSONS.keys():
with open(listOfJSONS.get(arg), "w", encoding="utf-8") as json_file:
json_file.write(json_string)
这应该有效。
看来你可以通过 nargs
使用一个参数来简化这一点。这是一个例子:
import argparse
JSON_PATHS = {
"JSON1": "path/json1",
"JSON2": "path/json2",
}
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("files", nargs="+")
args = parser.parse_args()
for f in args.files:
print(JSON_PATHS.get(f))
➜ ./main.py JSON1 JSON2
输出:
path/json1
path/json2
我正在尝试根据传递的参数生成一些 JSON,但每次我 运行 脚本都会生成所有 JSON,而不仅仅是我在 CLI 中指定的那些
import json
import argparse
listOfJSONS = {
"JSON1" : "path",
"JSON2" : "path",
...
}
if __name__ == "__main__":
parser.add_argument(
"--JSON1",
action='store_true',
default=False,
help="Creates one JSON",
)
parser.add_argument(
"--JSON2",
action='store_true',
default=False,
help="Creates different JSON",
)
# repeat .add_argument() for all JSONS in the dict
args = parser.parse_args()
for arg in vars(args):
if arg in listOfJSONS .keys():
with open(listOfJSONS.get(arg), "w", encoding="utf-8") as json_file:
json_file.write(json_string)
但是当我运行
python ./JSONgenerator.py --JSON1 --JSON2
它会创建 listOfJSONS 中指定的所有 JSON,而不仅仅是我指定的两个。 非常感谢您的帮助
编辑:我也尝试在 args = parser.parse_args(sys.argv[1:])
中使用 sys.argv([1:])
但没有成功
for arg, argbool in args._get_kwargs():
if argbool and arg in listOfJSONS.keys():
with open(listOfJSONS.get(arg), "w", encoding="utf-8") as json_file:
json_file.write(json_string)
这应该有效。
看来你可以通过 nargs
使用一个参数来简化这一点。这是一个例子:
import argparse
JSON_PATHS = {
"JSON1": "path/json1",
"JSON2": "path/json2",
}
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("files", nargs="+")
args = parser.parse_args()
for f in args.files:
print(JSON_PATHS.get(f))
➜ ./main.py JSON1 JSON2
输出:
path/json1
path/json2