837 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

54voto

JPCosta Punkte 1217

Eine Möglichkeit, dies zu tun, ist die Verwendung von sys.argv . Dadurch werden der Name des Skripts als erstes Argument und alle anderen Parameter, die Sie ihm übergeben, gedruckt.

import sys

for arg in sys.argv:
    print arg

53voto

ralbatross Punkte 2330

Le site docopt Bibliothek ist wirklich raffiniert. Sie baut ein Argument Diktat aus der Verwendung Zeichenfolge für Ihre App.

Z.B. aus der Readme-Datei von docopt:

"""Naval Fate.

Usage:
  naval_fate.py ship new <name>...
  naval_fate.py ship <name> move <x> <y> [--speed=<kn>]
  naval_fate.py ship shoot <x> <y>
  naval_fate.py mine (set|remove) <x> <y> [--moored | --drifting]
  naval_fate.py (-h | --help)
  naval_fate.py --version

Options:
  -h --help     Show this screen.
  --version     Show version.
  --speed=<kn>  Speed in knots [default: 10].
  --moored      Moored (anchored) mine.
  --drifting    Drifting mine.

"""
from docopt import docopt

if __name__ == '__main__':
    arguments = docopt(__doc__, version='Naval Fate 2.0')
    print(arguments)

26voto

whi Punkte 2433
#set default args as -h , if no args:
if len(sys.argv) == 1: sys.argv[1:] = ["-h"]

20voto

Van Gale Punkte 42727

Ich selbst verwende optparse, aber mir gefällt die Richtung, die Simon Willison mit seinem kürzlich vorgestellten optfunc Bibliothek. Sie funktioniert folgendermaßen:

"Introspektion einer Funktionsdefinition Definition (einschließlich ihrer Argumente) und deren Standardwerte) und die Verwendung um einen Befehlszeilenparser zu konstruieren Argument-Parser".

So zum Beispiel diese Funktionsdefinition:

def geocode(s, api_key='', geocoder='google', list_geocoders=False):

wird in diesen optparse-Hilfetext umgewandelt:

    Options:
      -h, --help            show this help message and exit
      -l, --list-geocoders
      -a API_KEY, --api-key=API_KEY
      -g GEOCODER, --geocoder=GEOCODER

9voto

Peter Ericson Punkte 1789

Ich mag getopt von stdlib, z.B.:

try:
    opts, args = getopt.getopt(sys.argv[1:], 'h', ['help'])
except getopt.GetoptError, err: 
    usage(err)

for opt, arg in opts:
    if opt in ('-h', '--help'): 
        usage()

if len(args) != 1:
    usage("specify thing...")

In letzter Zeit habe ich etwas Ähnliches wie das hier eingepackt, um die Dinge weniger ausführlich zu machen (z.B. indem ich "-h" implizit mache).

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