Detaillierte Erläuterung des argparse-Moduls

1. Einführung in das argparse-Modul

argparse ist eine Python-Bibliothek zum Parsen von Befehlszeilenargumenten, die Teil der Python-Standardbibliothek ist. stdlib-Code basierend auf Python 2.7.

Das argparse- Modul erleichtert das Schreiben benutzerfreundlicher Befehlszeilenschnittstellen. Das Programm definiert die erforderlichen Argumente und argparse findet heraus, wie diese Argumente von sys.argv (der Befehlszeile) analysiert werden. Das argparse- Modul generiert außerdem automatisch Hilfe- und Nutzungsmeldungen und gibt Fehler aus, wenn der Benutzer dem Programm ungültige Argumente übermittelt.

2. Beispiel ohne Verwendung von argparse

Im Allgemeinen werden keine Terminalbefehle verwendet. Bei einigen Programmen, die eine Variablenzuweisung erfordern, führen wir häufig Folgendes aus:

  • 1. Schreiben Sie hart direkt in das Programm (oder die Konfigurationsdatei).
  • 2. Oder verwenden Sie die Eingabe, um sie mehrmals in die Befehlszeile einzugeben, sodass es nicht einfach ist, den Vorgang mehrmals zu debuggen und zu ändern. Das Folgende ist ein Beispiel:
import math

def cal_vol(radius,height):
    vol = math.pi * pow(radius,2) * height
    return vol

if __name__=='__main__':
    print(cal_vol(2,4))

argparse

3. Beispiel mit argparse

3.1 Einfaches Beispiel für argparse

Die wichtigsten Schritte zur Verwendung von argparse:

  • Importieren Sie das argparse- Paket.
  • Erstellen Sie ein ArgumentParser() -Parameterobjekt.
  • Rufen Sie die Methode add_argument() auf , um Parameter zum Parameterobjekt hinzuzufügen.
  • Verwenden Sie parse_args () , um das Parameterobjekt des hinzugefügten Parameters zu analysieren und das Analyseobjekt zu erhalten. Wenn andere Teile des Programms Befehlszeilenparameter verwenden müssen, verwenden Sie zum Abrufen das Analyseobjekt.parameter.

Hier ist ein einfaches Beispiel:

import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('radius', type=int, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('height', type=int, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args

# 计算圆柱体积
def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

Hinweis: Da dies zu diesem Zeitpunkt nicht angegeben ist, werden die Befehlszeilenparameter standardmäßig in der angegebenen Reihenfolge zugewiesen, und unterschiedliche Reihenfolgen führen zu unterschiedlichen Ergebnissen
Fügen Sie hier eine Bildbeschreibung einFügen Sie hier eine Bildbeschreibung ein

Der Standardbefehl -h kann beim Hinzufügen von Parametern die eingestellten Hilfeinformationen abrufen
Fügen Sie hier eine Bildbeschreibung ein

  • Die Eingabe von Befehlszeilenparametern wird standardmäßig in der Reihenfolge zugewiesen, und unterschiedliche Reihenfolgen führen zu unterschiedlichen Ergebnissen.
  • Der Standardbefehl -h kann beim Hinzufügen von Parametern die eingestellten Hilfeinformationen abrufen.

3.2 Erweitertes Beispiel für argparse

Methode add_argument() (definiert, wie Befehlszeilenparameter analysiert werden):
Fügen Sie hier eine Bildbeschreibung ein
Die Parameter werden wie folgt erklärt:

  • Name oder Flags – Ein Name oder eine Liste von Optionszeichenfolgen, z. B. foo oder -f, --foo.

  • Aktion – die Aktion, wenn die Befehlszeile auf den Parameter stößt. Der Standardwert ist „Speichern“.

    • – store_const, was darauf hinweist, dass die Zuweisung const ist;
    • – Anhängen, Speichern der gefundenen Werte als Liste, d. h. wenn die Parameter wiederholt werden, werden mehrere Werte gespeichert;
    • – append_const, das einen in der Parameterspezifikation definierten Wert in einer Liste speichert;
    • – count, speichert die Anzahl der Begegnungen; darüber hinaus können Sie auch argparse.Action erben, um die Parameteranalyse anzupassen;
  • nargs – die Anzahl der Befehlszeilenargumente, die gelesen werden sollen

    • Eine bestimmte Zahl oder eine ?-Zahl. Wenn kein Wert angegeben ist, verwenden Sie „default“ für das Positionsargument und „const“ für das optionale Argument
    • Oder *-Zeichen, das 0 oder mehr Parameter angibt;
    • Oder ein +-Zeichen bedeutet einen oder mehrere Parameter.
  • const – der erforderliche konstante Wert für Aktion und Nargs.

  • default – der Standardwert, wenn kein Parameter angegeben ist.

  • Typ – Der Typ, in den das Befehlszeilenargument konvertiert werden soll. Der Standardwert ist ein String-Typ.

  • Auswahlmöglichkeiten – Ein Container mit zulässigen Werten für den Parameter.

  • erforderlich – Ob optionale Parameter weggelassen werden können (nur für optionale Parameter).

  • help – die Hilfeinformationen des Parameters. Wenn argparse.SUPPRESS angegeben wird, bedeutet dies, dass die Hilfeinformationen des Parameters nicht angezeigt werden.

  • Metavar – der Name des Parameters in der Verwendungsbeschreibung. Standardmäßig ist der Name des Parameters für den erforderlichen Parameter und der Name des Parameters in Großbuchstaben für den optionalen Parameter.

  • dest – der geparste Parametername, standardmäßig wird der längste Name für optionale Parameter ausgewählt, Bindestriche werden in Unterstriche umgewandelt.

3.2.1 Optionale Parametereinstellungen
import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('--radius', default=2, type=int, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('--height', default=4, type=int, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

Durch Hinzufügen von - - vor dem Parameternamen wird er als optionaler Parameter festgelegt. Wenn er nicht eingegeben wird, wird der Standardwert verwendet (wenn Standard nicht festgelegt ist, lautet der Standardwert None), wie im folgenden Beispiel gezeigt:
Fügen Sie hier eine Bildbeschreibung ein

3.2.2 Optionale Parameterreferenznamen
import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('-r', '--radius', default=2, type=int, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('-H', '--height', default=4, type=int, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

Durch das Festlegen optionaler Parameter auf Referenznamen können die Parameternamen gekürzt und die Eingabe von Befehlszeilenparametern vereinfacht werden:
Fügen Sie hier eine Bildbeschreibung ein

Wie folgt: Sowohl -r als auch - -radius sind verfügbar
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

3.2.3 Löschen Sie die Parameternameninformationen in der Hilfe
import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('-H', '--height', default=4, type=int, metavar='', help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

Im Vergleich zu den von -h in 3.2.2 angezeigten Informationen ist der Grund für das Entfernen des Parameternamens wie folgt
Fügen Sie hier eine Bildbeschreibung ein:
Metavar zeigt den Parameternamen in der Verwendungsbeschreibung über -h an.
Für obligatorische Parameter ist der Standardwert der Parametername und Für optionale Parameter werden standardmäßig alle Parameter in Großbuchstaben geschrieben. Name. Es wird hier nicht angezeigt, indem es auf leer gesetzt wird.

3.2.4 Obligatorische Parametereinstellungen
import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', required=True, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('-H', '--height', default=4, type=int, metavar='', required=True, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

Wenn „required=True“ festgelegt ist , muss der Parameter unabhängig davon, ob er optional ist oder nicht, eingegeben werden, wie im folgenden Beispiel gezeigt:
Fügen Sie hier eine Bildbeschreibung ein

3.2.5 Eingabeeinstellung für Listenparameter (Multiparameter).
import math
import argparse


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')
    parse.add_argument('-n', '--num', type=int, nargs='+', metavar='', required=True, help='a string of nums')
    args = parse.parse_args()
    return args


if __name__ == '__main__':
    args = parse_args()
    print(args.num)
    for i in list(args.num):
        print(i)


argparse

3.2.6 Verwendung sich gegenseitig ausschließender Parameter
import math
import argparse


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', required=True, help='Radius of Cylinder')
    parse.add_argument('-H', '--height', default=4, type=int, metavar='', required=True, help='height of Cylinder')
    group = parse.add_mutually_exclusive_group()  # 1、在参数对象中添加互斥组
    group.add_argument('-b', '--brief', action='store_true', help='print brief message')  # 2、在互斥组中添加参数(store_true默认当命令行未输入参数则为False,否则为True)
    group.add_argument('-v', '--verbose', action='store_true', help='print verbose message')
    args = parse.parse_args()
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    volume = cal_vol(args.radius, args.height)
    if args.brief:
        print(volume)
    elif args.verbose:
        print('Volume of Cylinder with radius %s and height %s is %s' % (args.radius,args.height,volume))
    else:
        print('Volume of Cylinder is %s' % (volume))

In der Befehlszeile können b und v nur einen der beiden Parameter eingeben.
Fügen Sie hier eine Bildbeschreibung ein

3.2.7 Standardparametereinstellungen

set_defaults() kann den Standardwert einiger Parameter festlegen

import math
import argparse


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', required=True, help='Radius of Cylinder')
    parse.set_defaults(height=4)
    args = parse.parse_args()
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))

Fügen Sie hier eine Bildbeschreibung ein

4. Referenzen

Supongo que te gusta

Origin blog.csdn.net/craftsman2020/article/details/129237425
Recomendado
Clasificación