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?
Antworten
Zu viele Anzeigen?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'>
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
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)
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
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 vonoptparse
.3 Stimmen
Duplikat von Wie kann man in Python von stdin lesen? , Wie werden Befehlszeilenargumente gelesen/verarbeitet? . Diskutiert auf meta .
0 Stimmen
Es ist nicht wirklich ein Duplikat des ersten: Die Benutzereingabe kommt von
/dev/tty
, was nicht immer mit der Standardeingabe identisch ist.