Es war mühsam, die Befehlszeilenargumente und die Parameter der Einstellungsdatei separat zu verwalten. Daher dachte ich, es wäre gut, einen Parser zu finden, der beide gleichzeitig verwalten kann, und überprüfte ihn daher.
ConfigArgParse https://github.com/bw2/ConfigArgParse
Wenn es nicht zu oft verwendet wird, ist es EOL, also überprüfen Sie es leicht
~$ apt-cache rdepends python3-configargparse
python3-configargparse
Reverse Depends:
python3-certbot
snakemake
bdfproxy
python3-azure-devtools
prometheus-pgbouncer-exporter
cloudprint
Das wichtigste ist "cerbot", ein Client von Let's Encrypt, oder "bdfproxy" für Sicherheitsleute, nicht wahr?
Überprüfen Sie auch die unterstützten Formate.
# how to specify a key-value pair (all of these are equivalent):
name value # key is case sensitive: "Name" isn't "name"
name = value # (.ini style) (white space is ignored, so name = value same as name=value)
name: value # (yaml style)
--name value # (argparse style)
Stellen Sie sicher, dass das Leerzeichen, das INI-Format und das Yaml-Format standardmäßig unterstützt werden. Ich war froh, wenn es wenn möglich ein JSON-Format gab, aber es ist gut, weil es dem Yaml-Stil entspricht, der in einem Radius von 5 m am häufigsten verwendet wird.
Die Testumgebung ist Ubuntu 19.04 Die neueste Version ist ab dem 1. Oktober 2019 0.14.0 (13. Januar 2019) Upstream, aber ich möchte keine Sicherheitspatches usw. in Betrieb nehmen, daher werde ich das Paket der oben genannten Distribution verwenden.
$ sudo apt install python3-configargparse
$ dpkg -l python3-configargparse
Anfrage=(U)Unbekannt/(I)Installation/(R)Löschen/(P)完全Löschen/(H)Aufbewahrung
|Status=(N)Nichts/(I)Eingerichtet/(C)Aufbau/(U)Einsatz/(F)Aufbau失敗/(H)Halbinstalliert/(W)
|/Error?=(Leer)Nichts/(R)Neuinstallation erforderlich(Status,Großbuchstabe des Fehlers=Abnormal)
||/Name Version Architekt Beschreibung
+++-======================-============-============-===========================
ii python3-configargparse 0.13.0-1 all replacement for argparse wi
lines 1-6/6 (END)
#!/usr/bin/env python3
import configargparse
def parse_args():
cp = configargparse.ArgumentParser(
default_config_files=['./.arg_parse.yaml']
)
cp.add_argument(
'-c', '--conf',
dest='config',
is_config_file=True,
help='config file path',
)
cp.add_argument(
'-f', '--flag',
dest='flag',
action="store_true",
help='true or false flag'
)
cp.add_argument(
'-s', '--str',
type=str,
required=True,
dest='string',
help='requirement string'
)
cp.add_argument(
'-i', '--int',
type=int,
dest='intager',
default=50,
help='default intager',
)
cp.add_argument(
'-a', '--array',
dest='array',
action='append',
default=[],
help='array parama',
)
return cp.parse_args()
def main():
args = parse_args()
print(args)
main()
Einstellungsdatei (Beispiel für ein Yaml-Format)
$ cat .arg_parse.yaml
str: hogehoge
int: 3
array: [1, 12, 35, 40]
Ausführungsergebnis 1 Nur Datei einstellen
$ ./test_conf.py
Namespace(array=['1', '12', '35', '40'], config=None, flag=False, intager=3, string='hogehoge')
Ausführungsergebnis 2 Wenn sowohl die Konfigurationsdatei als auch das Befehlszeilenargument verwendet werden
$ ./test_conf.py -i 1111 -s fugafuga -f
Namespace(array=['1', '12', '35', '40'], config=None, flag=True, intager=1111, string='fugafuga')
"Store_true" ist standardmäßig "False" und "store_false" ist standardmäßig "True". Ich war verwirrt darüber, ob es das Gegenteil war, aber es scheint gut zu glauben, dass es wahr bzw. falsch sein wird, wenn es durch Befehlszeilenargumente angegeben wird.
Ich finde es schön, argparse und configparse getrennt zu verwalten und nicht süchtig danach zu sein, nur eine zu ändern.
Recommended Posts