624 Stimmen

Abfrage von Benutzereingaben und Lesen von Befehlszeilenargumenten

Wie habe ich ein Python-Skript, das a) kann Benutzereingaben akzeptieren und wie mache ich es b) lesen in Argumente, wenn von der Befehlszeile ausgeführt?

9 Stimmen

Die Antwort hängt von Ihrer Version von Python ab. Python 3.x handhabt dies ein wenig anders als Python 2.7

4 Stimmen

Und Python 2.7 macht das auch ein bisschen anders als die Versionen vor 2.7, z.B. argparse anstelle von optparse .

19voto

Viswesn Punkte 4330

Dieses einfache Programm hilft Ihnen zu verstehen, wie man die Benutzereingabe von der Kommandozeile einspeist und wie man Hilfe bei der Übergabe eines ungültigen Arguments anzeigt.

import argparse
import sys

try:
     parser = argparse.ArgumentParser()
     parser.add_argument("square", help="display a square of a given number",
                type=int)
    args = parser.parse_args()

    #print the square of user input from cmd line.
    print args.square**2

    #print all the sys argument passed from cmd line including the program name.
    print sys.argv

    #print the second argument passed from cmd line; Note it starts from ZERO
    print sys.argv[1]
except:
    e = sys.exc_info()[0]
    print e

1) Die Quadratwurzel aus 5 finden

C:\Users\Desktop>python -i emp.py 5
25
['emp.py', '5']
5

2) Übergabe eines ungültigen Arguments außer einer Zahl

C:\Users\bgh37516\Desktop>python -i emp.py five
usage: emp.py [-h] square
emp.py: error: argument square: invalid int value: 'five'
<type 'exceptions.SystemExit'>

13voto

Simon Peverett Punkte 3978

Verwenden Sie 'raw_input' für Eingaben von einer Konsole/Terminal.

wenn Sie nur ein Kommandozeilenargument wie einen Dateinamen oder etwas anderes benötigen, z. B.

$ python my_prog.py file_name.txt

dann können Sie sys.argv verwenden...

import sys
print sys.argv

sys.argv ist eine Liste, in der 0 der Programmname ist, im obigen Beispiel wäre sys.argv[1] also "Dateiname.txt".

Wenn Sie vollständige Kommandozeilenoptionen haben möchten, verwenden Sie das optparse-Modul.

Pev

10voto

Matt Olan Punkte 1781

Wenn Sie Python <2.7 verwenden, benötigen Sie optparse die, wie in der Dokumentation erläutert, eine Schnittstelle zu den Befehlszeilenargumenten schafft, die beim Ausführen Ihrer Anwendung aufgerufen werden.

In Python 2.7 ist optparse jedoch veraltet und wurde durch die Option argparse wie oben dargestellt. Ein kurzes Beispiel aus der Dokumentation...

Der folgende Code ist ein Python-Programm, das eine Liste von Ganzzahlen verarbeitet aufnimmt und entweder die Summe oder den Maximalwert ermittelt:

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                   help='an integer for the accumulator')
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)

7voto

GreenMatt Punkte 17578

Ab Python 3.2 2.7, gibt es jetzt argparse für die Verarbeitung von Befehlszeilenargumenten.

7voto

CorpseDead Punkte 113

Wenn es sich um eine 3.x-Version handelt, verwenden Sie einfach:

variantname = input()

Sie wollen zum Beispiel 8 eingeben:

x = input()
8

x wird gleich 8 sein, aber es wird eine Zeichenkette sein, es sei denn, Sie definieren es anders.

Sie können also den Befehl convert verwenden, etwa:

a = int(x) * 1.1343
print(round(a, 2)) # '9.07'
9.07

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