Dies ist die Python-Version eines anderen Artikels, "Abrufen von Optionen in Ruby aus JSON-Dateien und Befehlszeilenargumenten" (https://qiita.com/aikige/items/014139c0b1ae70139477). Da die Verwendung von Python heutzutage zunimmt, werde ich das Ergebnis der Untersuchung darüber teilen, wie man dasselbe mit Python schreibt.
Klassenoptionenopt = Options ('some.json') liest Optionen aus einer JSON-Datei.opt.option_1 darauf zugreifen.https://gist.github.com/aikige/470f4ef93753638cc3a18d62e195eb19
#!/usr/bin/env python
import json
import os
class Options:
    OPTS = { 'option_1': 'bool', 'option_2': 'str' }
    def __init__(self, filename='config.json'):
        if (os.path.exists(filename)):
            with open(filename) as f:
                self.import_dict(json.load(f))
    def import_attr(self, key, value):
        if (value is None):
            return
        if (isinstance(value, eval(self.OPTS[key]))):
            setattr(self, key, value)
        else:
            raise ValueError("invalid type")
    def import_dict(self, d):
        for key in self.OPTS.keys():
            if (key in d.keys()):
                self.import_attr(key, d[key])
    def import_opt(self, args):
        for key in self.OPTS.keys():
            if (hasattr(args, key)):
                self.import_attr(key, getattr(args, key))
if __name__ == '__main__':
    import argparse
    opt = Options()
    print(vars(opt))
    parser = argparse.ArgumentParser()
    parser.add_argument('-1', '--option_1', action='store_true', default=None)
    parser.add_argument('-2', '--option_2', type=str)
    args = parser.parse_args()
    print(vars(args))
    opt.import_opt(args)
    print(vars(opt))
Recommended Posts