Frage

meine Python-Version ist 2.4.3.

Nun entwickle ich eine CLI mit cmd-Modul von Python für einen CD-Player. Ich habe einige Klassen wie CDContainer (mit Verfahren wie addCD, removeCD, etc.), CD (mit Verfahren wie Wiedergabe, Stopp, Pause). Nun möchte ich einige Optionen für die Befehle hinzuzufügen und auch wenn die Optionen Eingaben nicht korrekt sind, könnte die CLI richtigen Informationen zu jedem falschen Eingabetyp oder falsche Werte zurückgeben. zum Beispiel, ich will "addcd --track 3 --cdname Thriller" haben. was ich tue jetzt alle Argumente über bekommen, teilen Sie es, und weisen Sie auf die entsprechenden Variablen, folgt wie.

Meine Frage ist in Python, gibt es einige Modul, das praktisch ist, für meinen Fall der Optionen oder Argumente zu analysieren und zu analysieren?

REVISION:. OK, ich bearbeiten es, dank gclj5 Kommentare

import cmd
class CDContainerCLI(cmd.Cmd):

    def do_addcd(self, line):
        args=line.split()
        parser = OptionParser()
        parser.add_option("-t", "--track", dest="track_number", type="int",
            help="track number")
        parser.add_option("-n", "--cdname", dest="cd_name", type="string",
            help="CD name")
        (options, positional_args) = parser.parse_args(args)
        cd_obj= CD()
        cd_obj.addCD(options.track_number, options.cd_name)

Wenn möglich, könnten Sie einige Code-Beispiele zu schreiben, nur um zu zeigen, wie es zu tun?

Vielen Dank !!

War es hilfreich?

Lösung

Abhängig von Ihrer Python-Version, sollten Sie einen Blick auf entweder optparse (seit Version 2.3, veraltet seit Version 2.7) oder argparse (ab Version 2.7).

Einige Beispielcode mit optparse (line ist die Zeichenfolge, die Sie von stdin im CLI lesen):

from optparse import OptionParser

args = line.split()

parser = OptionParser()
parser.add_option("-t", "--track", dest="track_number", type="int",
                  help="track number")
parser.add_option("-n", "--cdname", dest="cd_name", type="string",
                  help="CD name")

# args[0] contains the actual command ("addcd" in this example).
(options, positional_args) = add_cd_parser.parse_args(args[1:])

if options.track_number != None and options.cd_name != None:
    cd_obj= CD()
    cd_obj.addCD(options.track_number, options.cd_name)
    print "add CD (track %d, name %s)" % (options.track_number, options.cd_name)

Dieser Parser nur behandelt Ihre "addcd" -Befehl. Weitere Befehle können Sie mehr OptionParser Objekte in einem Wörterbuch mit dem Befehlsnamen als Schlüssel, zum Beispiel verwenden. Sie könnten die Optionen wie folgt analysieren dann:

(options, args) = parsers[args[0]].parse_args(args[1:])

Werfen Sie einen Blick in die Dokumentation für optparse für weitere Informationen. Es ist sehr einfach zu Ausgabe Nutzungsinformationen, zum Beispiel. Es gibt auch eine Tutorial zur Verfügung.

Andere Tipps

  

Meine Frage ist in Python, gibt es einige Modul, das praktisch ist, für meinen Fall der Optionen oder Argumente zu analysieren und zu analysieren?

Ja, das argparse Modul .

Wenn Sie bereits vertraut sind mit der getopt Bibliothek von C, , die auch als Python-Modul verfügbar ist -. wenn auch weniger leicht zu bedienen, wenn Sie bereits, um es nicht verwendet

Hier ist ein Demo-Skript, das ich vor ein paar Monaten schrieb, wenn meine Mitarbeiter und ich waren das Erlernen der argparse Modul. Es zeigt einige der Modul Verhaltensweisen und Eigenschaften:

import sys
import argparse

def parse_command_line():
    # Define our argument parser.
    ap = argparse.ArgumentParser(
        description = 'This is a demo app for the argparse module.',
        epilog      = 'This text will appear after options.',
        usage       = '%(prog)s [options]',  # Auto-generated by default.
        add_help    = False,                 # Default is True.
    )

    # A grouping of options in the help text.
    gr = ap.add_argument_group('Required arguments')

    # A positional argument. This is indicated by the absense
    # of leading minus signs.
    gr.add_argument(
        'task',
        choices = ['get', 'put'],
        help = 'Task to be performed.', # Help text about an option.
        metavar = 'TASK', # Placeholder to be used in an option's help text.
                          # The default in this case would be "{get,put}".
    )

    # Another group.
    gr = ap.add_argument_group('Common options')

    # A basic option.
    gr.add_argument(
        '-s', '--subtask',
        action = 'store',  # This is the default.
                           # One value will be stored, as a string, 
                           # in opt.subtask
    )

    # A required option, with type conversion.
    gr.add_argument(
        '-u', '--user',
        required = True, # Options can be made mandatory.
                         # However, positional arguments can't be made optional.
        type = int,      # Convert opt.user to an integer.
                         # By default, it would be a string.
    )

    # A flag option.
    gr.add_argument(
        '--overwrite',
        dest = 'clobber',      # Store in opt.clobber rather than opt.overwrite.
        action = 'store_true', # If option is supplied, opt.clobber == True.
    )

    # Another group.
    gr = ap.add_argument_group('Some other options')

    # An option with multiple values.
    gr.add_argument(
        '--datasets',
        metavar = 'DATASET', # Default would be DATASETS.
        nargs = '+',  # If option is used, it takes 1 or more arguments.
                      # Will be stored as a list in opt.datasets.
        help = "The datasets to use for frobnication.",
    )

    # An option with a specific N of values.
    gr.add_argument(
        '--bar',
        nargs = 1,    # Takes exactly one argument. Differs from a basic
                      # option because opt.bar will be a list rather 
                      # than a string.
        default = [], # Default would be None.
    )

    # A file option.
    gr.add_argument(
        '--log',
        type    = argparse.FileType('w'),  # Will open a file for writing.
        default = sys.stdout,
        help    = 'Log file (default: STDOUT)',
    )

    # Another group.
    gr = ap.add_argument_group('Program information')

    # A version option.
    gr.add_argument(
        '-v', '--version',
        action = 'version', # Will display version text and exit.
        version = 'argparse_demo v1.2.0', # The version text.
    )

    # A help option.
    gr.add_argument(
        '-h', '--help',
        action = 'help', # Will display help text and exit.
    )

    # Parse the options.
    # If given no arguments, parse_args() works with sys.argv[1:].
    # And the object it returns will be of type Namespace.
    opt = ap.parse_args()

    return opt

command_lines = [
    'argparse_demo.py put -u 1',
    'argparse_demo.py get -u 234 --over --data a b c --bar XYZ -s munch --log _log.txt',
    'argparse_demo.py -h', # Will exit() here.
]

for c in command_lines:
    sys.argv = c.split()
    opt = parse_command_line()
    print opt
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top