Python-Hinweise: argparse-Modul

verwenden

Pythons Standardmodul zum Parsen von Befehlszeilenargumenten und -optionen, in Python integriert und erfordert keine Installation.

Schritte zur Verwendung

Modul importieren

import argparse

Erstellen eines Parsers
Der erste Schritt bei der Verwendung von argparse besteht darin, ein ArgumentParser-Objekt zu erstellen:

parser = argparse.ArgumentParser(description='Process some integers.')

Das ArgumentParser-Objekt enthält alle Informationen, die zum Parsen der Befehlszeile in Python-Datentypen erforderlich sind.

Parameter hinzufügen
Das Hinzufügen von Programmparameterinformationen zu einem ArgumentParser erfolgt durch Aufrufen der Methode add_argument(). Normalerweise geben diese Aufrufe an, wie der ArgumentParser die Befehlszeilenzeichenfolge übernimmt und in ein Objekt umwandelt. Diese Informationen werden gespeichert und verwendet, wenn parse_args() aufgerufen wird.

parser.add_argument( ' ***' )

Parsen von Parametern
ArgumentParser analysiert Parameter über die Methode parse_args(). Es untersucht die Befehlszeile, konvertiert jeden Parameter in den entsprechenden Typ und ruft dann die entsprechende Operation auf. In den meisten Fällen handelt es sich dabei um ein einfaches Namespace-Objekt, das aus Eigenschaften erstellt wird, die über die Befehlszeile analysiert werden:

args = parser.parse_args() 

Weisen Sie der args-Instanz Attribute zu, d. h. geben Sie alle „add_argument“-Einstellungen im Parser an die args-Unterklasseninstanz zurück.
Das Endergebnis ist ein Datentyp ähnlich einem Python-Wörterbuch. Wir können den Namen args.parameter verwenden, um die entsprechenden Parameter zu extrahieren

argparse.ArgumentParser()

Parameteranalyse: Im Allgemeinen nur Beschreibung verwenden

1. Beschreibung – der Starttext der Befehlszeilenhilfe. In den meisten Fällen verwenden wir nur diesen Parameter
2.epilog – der Endtext der Befehlszeilenhilfe
3.prog – (Standard: sys.argv[0]) der Name des Programms, im Allgemeinen ist keine Änderung erforderlich.
4. prefix_chars – das Präfix des Befehls, der Standardwert ist -, z. B. -f/–file.
5.fromfile_prefix_chars – (Standard: Keine) Kann verwendet werden, wenn die Befehlszeilenparameter aus einer Datei gelesen werden sollen. Wenn beispielsweise fromfile_prefix_chars='@' einer der Befehlszeilenparameter „@args.txt“ ist, wird der Inhalt von args.txt als Befehlszeilenparameter
6 verwendet. add_help – ob -h/- hinzugefügt werden soll Hilfeoption (Standard: True) , im Allgemeinen sind Hilfeinformationen erforderlich, daher besteht keine Notwendigkeit, diese festzulegen.
7.parents – Der Typ ist list. Wenn einige Optionen dieses Parsers mit denen einiger anderer Parser identisch sind, können parents zum Implementieren der Vererbung verwendet werden, zum Beispiel parent=[parent_parser] 8.argument_default – (Standard:
None) Legen Sie eine globale Option fest. Der Standardwert, weniger verwendet
9.usage - (Standard: generiert) Wenn Sie die Nutzungsinformationen ändern müssen (Verwendung: PROG [-h] [–foo [FOO]] bar [bar …]), dann Sie können dies ändern. Ändern Sie es im Allgemeinen nicht.
10.conflict_handler – Veraltet. Dies wird nur in extremen Fällen verwendet. Es definiert hauptsächlich, wie mit Konflikten zwischen den Namen zweier in add_argument hinzugefügter Optionen umgegangen werden soll. Die Standardbehandlung besteht darin, eine Ausnahme auszulösen.

add_argument()

Befehlszeilenparameter:

ArgumentParser.add_argument(name or flags...[,action][,nargs][,const][,default]
                           [,type][,choices][,required][,help][,metavar][,dest])

Parameteranalyse:

Optionszeichenfolgename oder -liste – Name oder Flags
müssen Parameter haben, die hauptsächlich in die folgenden Typen unterteilt sind:

1. Positionsparameter: Beim Aufruf müssen Parameter ohne „-“ oder „- -“ eingegeben werden. Die Reihenfolge ist dieselbe wie bei der Definition. 2. Optionale Parameter
: Parameter mit „-“ oder „--“, wenn sie nicht definiert sind. Der Standardwert ist None. „-“ stellt die Abkürzung des Parameters dar, was die Eingabe über die Befehlszeile erleichtert.

Die Aktion, wenn die Befehlszeile auf Parameter trifft – Aktion
gibt an, wie die Befehlszeilenparameter verarbeitet werden sollen. Die voreingestellten Operationen sind wie folgt:
1. action='store' speichert nur den Parameterwert, der der Standardwert der Aktion ist

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo')
>>> parser.parse_args('--foo 1'.split())
Namespace(foo='1')

2.action='store_const' ist im Grunde dasselbe wie store, aber store_const speichert nur den durch das const-Schlüsselwort angegebenen Wert

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_const', const=42)
>>> parser.parse_args('--foo'.split())
Namespace(foo=42)
>>> parser.parse_args('--foo 34'.split())
usage: arg_parse.py [-h] [--foo]
arg_parse.py: error: unrecognized arguments: 34

3. action='store_true' oder 'store_false' stimmt mit store_const überein. Es werden nur True und False gespeichert.
Diese Option wird häufig verwendet. Nehmen Sie action='store_true' als Beispiel. Diese Option bedeutet, dass solange die Variable Parameter hat Wird zur Laufzeit übergeben, wird die Variable gespeichert. Auf True setzen.

#demo.py 代码如下
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--t', help=' ', action='store_true', default=False)
config = parser.parse_args()

print(config.t)

Führen Sie python demo.py direkt aus und das Ausgabeergebnis ist False.
Führen Sie python a.py --t aus und das Ausgabeergebnis ist True [das heißt, solange –t eingegeben wird, müssen später keine weiteren Parameter übergeben werden , und die Variable wird auf True gesetzt]

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_true')
>>> parser.add_argument('--bar', action='store_false')
>>> parser.parse_args('--foo --bar'.split())
Namespace(bar=False, foo=True)

4.action='append' speichert verschiedene Werte desselben Parameters in einer Liste

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='append')
>>> parser.parse_args('--foo 1 --foo 2'.split())
Namespace(foo=['1', '2'])

5.action='help' gibt Hilfeinformationen für das Programm aus

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='help')
>>> parser.parse_args('--foo'.split()) 
usage: arg_parse.py [-h] [--foo]

optional arguments:
  -h, --help  show this help message and exit
  --foo

6.action='version' gibt Informationen zur Programmversion aus

>>> import argparse
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('--version', action='version', version='%(prog)s 2.0')
>>> parser.parse_args(['--version'])
PROG 2.0

Übergabe einer unterschiedlichen Anzahl von Argumenten – Nargs

nargs='*' bedeutet, dass null oder mehr Parameter eingestellt werden können, Rückgabeliste
nargs='+' bedeutet, dass ein oder mehrere Parameter eingestellt werden können, Rückgabeliste
nargs='?' bedeutet, dass null oder ein Parameter eingestellt werden kann

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs='+')
>>> parser.add_argument('--bar', nargs='*')
>>> parser.add_argument('baz', nargs='?')
>>> print(args.foo)
>>> print(args.bar)
>>> print(args.baz)

python demo.py a --foo x y --bar 1 2
out:
['x', 'y']
['1', '2']
'a'

Datentyp ändern – Typ
Standardmäßig speichern ArgumentParser-Objekte Befehlszeilenargumente als Zeichenfolgen. Normalerweise sollten Befehlszeilenargumente jedoch als ein anderer Typ wie float oder int interpretiert werden. Durch die Angabe des Typs können Sie eine Typprüfung und Typkonvertierung für Befehlszeilenparameter durchführen. Gängige integrierte Typen und Funktionen können direkt als Wert des Typparameters verwendet werden:

import argparse

parser = argparse.ArgumentParser(description='命令行中传入一个数字')
parser.add_argument('integers', nargs='+',help='传入的数字')
args = parser.parse_args()

#对传入的数据进行加总
print(args.integers)

python demo.py 1 2
out:
['1', '2']  #默认保存为字符串

Ändern Sie den Parametertyp

import argparse

parser = argparse.ArgumentParser(description='命令行中传入一个数字')
parser.add_argument('integers', type=int, nargs='+',help='传入的数字')
args = parser.parse_args()

#对传入的数据进行加总
print(args.integers)

python demo.py 1 2
out:
[1, 2]  #参数保存为int类型

Standardwert - Standard
Manchmal ist es notwendig, einen Standardwert für einen bestimmten Parameter festzulegen. Das heißt, wenn der Wert des Parameters nicht in der Befehlszeile übergeben wird, verwendet das Programm den Standardwert. Wenn dieser Parameter über die Befehlszeile übergeben wird, verwendet das Programm den übergebenen Wert.

import argparse

parser = argparse.ArgumentParser(description='姓名')
parser.add_argument('--family', type=str, default='张',help='姓')
parser.add_argument('--name', type=str, default='三', help='名')
args = parser.parse_args()

#打印姓名
print(args.family+args.name)

Geben Sie python demo.py bzw. python demo.py --family=Li in die Befehlszeile ein.
Die laufenden Ergebnisse lauten wie folgt:

张三

Und

李三

Erforderliche Parameter: Mit „erforderlich“
können Sie nur für optionale Parameter festlegen, ob der Parameter erforderlich ist oder nicht. Der Standardwert ist False. Wenn er True ist, bedeutet dies, dass er eingegeben werden muss.

import argparse

parser = argparse.ArgumentParser(description='姓名')
parser.add_argument('--family', type=str, help='姓')
parser.add_argument('--name', type=str, required=True, default='', help='名')
args = parser.parse_args()

#打印姓名
print(args.family+args.name)

Geben Sie python demo.py --family=Zhang in die Befehlszeile ein und führen Sie die Ergebnisse aus.

usage: demo.py [-h] [--family FAMILY] --name NAME
demo.py: error: the following arguments are required: --name

Da der optionale Parametername „=True“ erfordert, muss er übergeben werden. Wenn wir es auf False ändern, wird das Programm als Ergebnis ausgeführt

Auswahlparameter – Auswahlmöglichkeiten
begrenzen den Wert des Befehlszeilenparameters auf einen Bereich und es wird ein Fehler gemeldet, wenn er diesen Bereich überschreitet.

import argparse

parser = argparse.ArgumentParser(description='命令行中传入一个数字')
parser.add_argument('integers',help='传入的数字')
parser.add_argument('--num', type=int, choices = [1,2,5])
args = parser.parse_args()

#对传入的数据进行加总
print(args.num)

Führen Sie den Code python demo.py 1 --num 5 aus

5

Führen Sie den Code python demo.py 1 --num 6 aus

usage: demo.py [-h] [--num {
    
    1,2,5}] integers
demo.py: error: argument --num: invalid choice: 20 (choose from 1, 2, 5)
#输入的参数限定在1,2,5中

Hilfeinformationen – Hilfe
legt die Hilfeinformationen für diese Option [Parameter] fest. Bei Angabe als argparse.SUPPRESS bedeutet dies, dass die Hilfeinformationen für diesen Parameter nicht angezeigt werden.

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-s', action='store', dest='simple_value',
        help='Store a simple value')
parser.add_argument('-c', action='store_const', dest='constant_value',
        const='value-to-store',
        help='Store a constant value')
parser.add_argument('-t', action='store_true', default=False,
        dest='boolean_switch',
        help=argparse.SUPPRESS)

results = parser.parse_args()

Code ausführen

python demo.py -h

Die Ergebnisse zeigen

usage: demo.py [-h] [-s SIMPLE_VALUE] [-c] [-t]
optional arguments:
  -h, --help       show this help message and exit
  -s SIMPLE_VALUE  Store a simple value
  -c               Store a constant value

Legen Sie den Variablennamen des Parameters im Code fest –
der Standardvariablenname von dest argparse ist die Zeichenfolge nach – oder –, aber Sie können den Variablennamen des Parameters auch über dest=xxx festlegen und dann args.xxx im verwenden Code, um den Parameterwert zu erhalten.

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest='bar') #此时属性名称变成bar
config = parser.parse_args()
print(config.foo) 

Führen Sie den Code python demo.py --foo 2 aus, um die Ergebnisse auszugeben

Traceback (most recent call last):                                                                                        File "demo.py", line 160, in <module>                                                                                     print(config.foo)                                                                                                   AttributeError: 'Namespace' object has no attribute 'foo'  

Ändern Sie den Attributwert einer Ausgabe

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest='bar') #此时属性名称变成bar
config = parser.parse_args()
print(config.bar) 

Führen Sie den Code python demo.py --foo 2 aus, um die Ergebnisse auszugeben

2

Ich denke du magst

Origin blog.csdn.net/qq_44804542/article/details/116515469
Empfohlen
Rangfolge