Wie habe ich ein Python-Skript, das Benutzereingaben akzeptieren kann, und wie lasse ich Argumente einlesen, wenn es über die Befehlszeile ausgeführt wird?
Benutzereingaben und Befehlszeilenargumente [closed]
Teifion
Antti Rasinen
Um Benutzereingaben zu lesen, können Sie versuchen Die cmd
Modul zum einfachen Erstellen eines Mini-Befehlszeileninterpreters (mit Hilfetexten und Autovervollständigung) und raw_input
(input
für Python 3+) zum Lesen einer Textzeile vom Benutzer.
text = raw_input("prompt") # Python 2
text = input("prompt") # Python 3
Befehlszeileneingaben sind in sys.argv
. Versuchen Sie dies in Ihrem Skript:
import sys
print (sys.argv)
Es gibt zwei Module zum Analysieren von Befehlszeilenoptionen: (veraltet seit Python 2.7, use optparse
argparse
stattdessen) und getopt
. Wenn Sie nur Dateien in Ihr Skript einfügen möchten, sehen Sie sich die Macht von an fileinput
.
Der Python-Bibliotheksreferenz ist dein Freund.
-
raw_input
wurde umbenannt ininput
in Python 3.x – Dokumentation hier– dampfbetrieben
30. November 2011 um 22:49 Uhr
-
Meine Lieblingsquelle dazu: tutorialspoint.com/python/python_command_line_arguments.htm und das sieht auch gut aus: cyberciti.biz/faq/python-command-line-arguments-argv-example
– Jordan Stewart
20. April 2016 um 1:30 Uhr
-
sys.argv muss mit der Argumentnummer versorgt werden, wenn Sie beispielsweise einen Parameter als Wert übergeben. python file_name.py 2017-02-10 und Sie das Datum verwenden möchten, sollte es sys.argv sein[1] andernfalls wird es eine Liste wie sein [file_name.py,2017-02-10]
– Aravind Krishnakumar
10. Februar 2017 um 20:10 Uhr
-
Dies wird nicht von tty gelesen, wenn die Standardeingabe von woanders kommt. Die Frage macht nicht klar, was in diesem Fall passieren soll.
– reinierpost
13. April 2022 um 11:56 Uhr
lbz
var = raw_input("Please enter something: ")
print "you entered", var
Oder für Python 3:
var = input("Please enter something: ")
print("You entered: " + var)
-
Es sollte beachtet werden, dass Sie nicht importieren müssen
raw_input
es ist eine eingebaute Funktion.– Dennis Golomazov
2. Juli 2014 um 12:39 Uhr
-
Sie müssen str() nicht in der Druckverkettung verwenden, da alle eingegebenen Daten standardmäßig vom Typ str(ing) sind (gerade Zahlen).
– Goujon
8. November 2017 um 11:50 Uhr
-
Das funktioniert nicht gut: Es liest von der Standardeingabe, die nicht immer ein tty ist.
– reinierpost
13. April 2022 um 11:54 Uhr
-
@reinierpost Was meinst du? Es gibt sicherlich auch andere Möglichkeiten, Eingaben zu lesen, aber das funktioniert im Terminal gut. Einige IDEs könnten Probleme haben, weil sie Sie nicht mit einem Prozess interagieren lassen, der Sachen von stdin liest, aber das ist eher ein Fehler dieser IDEs.
– Dreier
1. Juni 2022 um 4:20 Uhr
-
@tripleee: Alle meine Skripte sind so geschrieben, dass sie ihre Ausgabe in stdout schreiben, sodass ich sie in eine Datei oder in eine Pipe umleiten kann. Wenn diese Skripte dem Benutzer Fragen stellen, müssen sie zu tty (dem Benutzer) gehen, nicht zur Datei oder Pipe (stdout). Ebenso sollten die Antworten des Benutzers von tty gelesen werden, selbst wenn das Skript stdin von woanders liest (obwohl dieser Anwendungsfall selten genug ist, dass keines meiner Skripte diese Unterscheidung treffen muss).
– reinierpost
1. Juni 2022 um 9:47 Uhr
dampfbetrieben
raw_input
ist in Python 3.x nicht mehr verfügbar. Aber raw_input
wurde umbenannt input
also existiert die gleiche Funktionalität.
input_var = input("Enter something: ")
print ("you entered " + input_var)
-
In Python 2.7 konvertiert input() keine Werte in Strings. Wenn Sie also Folgendes versuchen: input_variable1 = input (“Geben Sie das erste Wort oder den ersten Satz ein: “), erhalten Sie einen Fehler: Traceback (letzter Aufruf zuletzt): return eval(raw_input(prompt)) File “
“, Zeile 1, in NameError: name ‘bad’ is not defined – IgorGanapolsky
22. Februar 2012 um 17:55 Uhr
-
input_var = input (“Press ‘E’ and ‘Enter’ to Exit: “) NameError: Name ‘e’ ist nicht definiert Ich verwende Python 2.5. Wie kann ich diesen Fehler überwinden.
– Deepak Dubey
8. Mai 2013 um 8:11 Uhr
-
Sie können den Traceback-Hinweis vermeiden, indem Sie den folgenden Import verwenden, der mit Python 2.7 geliefert wird:
import fileinput result=[] for line in fileinput.input(): result.append(line)
– Stefan Grünwald
8. Februar 2014 um 4:59 Uhr
-
Hier ist mehr von der Geschichte und der Begründung: python.org/dev/peps/pep-3111
– Julian
16. Juli 2016 um 23:34 Uhr
David Webb
Der beste Weg, um Befehlszeilenargumente zu verarbeiten, ist die argparse
Modul.
Verwenden raw_input()
um Benutzereingaben zu erhalten. Wenn Sie die importieren readline module
Ihre Benutzer haben Zeilenbearbeitung und Verlauf.
Vhaerun
Achten Sie darauf, die nicht zu verwenden input
funktionieren, es sei denn, Sie wissen, was Sie tun. nicht wie raw_input
, input
akzeptiert jeden Python-Ausdruck, also ist es irgendwie so eval
Viswestn
Dieses einfache Programm hilft Ihnen zu verstehen, wie Sie die Benutzereingaben von der Befehlszeile aus eingeben und Hilfe beim Übergeben ungültiger Argumente anzeigen.
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) Um die Quadratwurzel von 5 zu finden
C:\Users\Desktop>python -i emp.py 5
25
['emp.py', '5']
5
2) Übergeben eines anderen ungültigen Arguments als der 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'>
Simon Peverett
Verwenden Sie ‘raw_input’ für die Eingabe von einer Konsole/einem Terminal.
wenn Sie nur ein Befehlszeilenargument wie einen Dateinamen oder etwas wollen, z
$ 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, also im obigen Beispiel sys.argv[1] wäre “dateiname.txt”
Wenn Sie vollständige Befehlszeilenoptionen haben möchten, verwenden Sie das optparse-Modul.
Pev
Die Antwort hängt von Ihrer Version von Python ab. Python 3.x macht das etwas anders als Python 2.7
– dampfbetrieben
26. Oktober 2012 um 21:23 Uhr
Und Python 2.7 macht das auch etwas anders als die Versionen vor 2.7, z
argparse
anstattoptparse
.– Hallo Auf Wiedersehen
22. Januar 2014 um 9:56 Uhr
Duplikat von How do you read from stdin in Python?, How to read/process command line arguments?. Auf Meta besprochen.
– Benutzer202729
10. September 2018 um 0:43 Uhr
Es ist nicht wirklich ein Duplikat des ersten: Benutzereingaben stammen von
/dev/tty
was nicht immer mit der Standardeingabe identisch ist.– reinierpost
24. April 2022 um 21:13 Uhr
In Übereinstimmung mit der von @ user202729 zitierten Meta-Diskussion habe ich andere Fragen, die hier als Duplikate verlinkt waren, bereinigt (in den meisten Fällen, indem ich sie so geändert habe, dass sie mit einem der beiden anderen Canonicals verknüpft sind) und die erste Löschstimme abgegeben.
– Karl Knechtel
5. Februar um 12:16 Uhr