忽略未传递的参数

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