814 Stimmen

Wie werden Befehlszeilenargumente gelesen/verarbeitet?

Ich bin ursprünglich ein C-Programmierer. Ich habe zahlreiche Tricks und "Hacks" gesehen, um viele verschiedene Argumente zu lesen.

Welche Möglichkeiten haben Python-Programmierer, dies zu tun?

Verwandte Seiten

700voto

John Slavick Punkte 9613
import sys

print("\n".join(sys.argv))

sys.argv ist eine Liste, die alle Argumente enthält, die dem Skript in der Befehlszeile übergeben wurden. sys.argv[0] ist der Name des Skripts.

Im Grunde genommen,

import sys
print(sys.argv[1:])

620voto

Ayman Hourieh Punkte 122012

Die kanonische Lösung in der Standardbibliothek lautet argparse ( docs ):

Hier ist ein Beispiel:

from argparse import ArgumentParser

parser = ArgumentParser()
parser.add_argument("-f", "--file", dest="filename",
                    help="write report to FILE", metavar="FILE")
parser.add_argument("-q", "--quiet",
                    action="store_false", dest="verbose", default=True,
                    help="don't print status messages to stdout")

args = parser.parse_args()

argparse unterstützt (unter anderem):

  • Mehrere Optionen in beliebiger Reihenfolge.
  • Kurze und lange Optionen.
  • Standardwerte.
  • Generierung einer Benutzungshilfemeldung.

134voto

Silfheed Punkte 10516

Einfach herumgehen und evangelisieren für argparse was besser ist für diese Gründe im Wesentlichen:

(aus dem Link kopiert)

  • argparse-Modul kann mit positionalen und optionale Argumente, während optparse nur optionale Argumente verarbeiten kann Argumente

  • argparse ist nicht dogmatisch darüber wie Ihre Kommandozeilenschnittstelle aussehen sollte - Optionen wie -file oder /file werden unterstützt, ebenso wie die erforderliche Optionen. Optparse weigert sich diese Funktionen zu unterstützen, da es die Reinheit über Praktikabilität

  • argparse erzeugt mehr informative Nutzungsmeldungen, einschließlich Befehlszeilenverwendung, ermittelt aus Argumenten ermittelt wird, und Hilfemeldungen für sowohl für positionale als auch für optionale Argumente. Das optparse-Modul erfordert, dass Sie Ihre eigene Verwendungs Zeichenkette zu schreiben, und hat keine Möglichkeit, die Hilfe für positionale Argumente anzuzeigen.

  • argparse unterstützt Aktionen, die eine variable Anzahl von Befehlszeilen-Args benötigen, während optparse erfordert, dass die genaue Anzahl von Argumente (z.B. 1, 2 oder 3) bekannt sein muss im Voraus

  • argparse unterstützt Parser, die an Unterbefehle weiterleiten, während optparse das Setzen von allow_interspersed_args und die Durchführung der Parser-Versand manuell

Und mein persönlicher Favorit:

  • argparse erlaubt es, die Parameter type und Aktionsparameter zu add_argument() die mit einfachen Callables angegeben werden, während optparse die hackende Klassenattribute wie STORE_ACTIONS ou CHECK_METHODS um eine ordnungsgemäße Überprüfung der Argumente

79voto

jfs Punkte 370717

もあります。 argparse stdlib-Modul (eine "Verbesserung" von stdlibs optparse Modul). Beispiel aus die Einführung in argparse :

# script.py
import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument(
        'integers', metavar='int', type=int, choices=range(10),
         nargs='+', help='an integer in the range 0..9')
    parser.add_argument(
        '--sum', dest='accumulate', action='store_const', const=sum,
        default=max, help='sum the integers (default: find the max)')

    args = parser.parse_args()
    print(args.accumulate(args.integers))

Verwendung:

$ script.py 1 2 3 4
4

$ script.py --sum 1 2 3 4
10

74voto

Wenn Sie etwas Schnelles und nicht sehr Flexibles brauchen

main.py:

import sys

first_name = sys.argv[1]
last_name = sys.argv[2]
print("Hello " + first_name + " " + last_name)

Dann laufen python main.py James Smith

um die folgende Ausgabe zu erzeugen:

Hallo James Smith

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X