Benutzereingaben und Befehlszeilenargumente [closed]

Lesezeit: 6 Minuten

Benutzeravatar von Teifion
Teifion

Wie habe ich ein Python-Skript, das Benutzereingaben akzeptieren kann, und wie lasse ich Argumente einlesen, wenn es über die Befehlszeile ausgeführt wird?

  • 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 anstatt optparse.

    – 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/ttywas 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

Benutzeravatar von Antti Rasinen
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: optparse (veraltet seit Python 2.7, use 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 in input 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

Benutzeravatar von lbz
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_inputes 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


Benutzeravatar von steampowered
dampfbetrieben

raw_input ist in Python 3.x nicht mehr verfügbar. Aber raw_input wurde umbenannt inputalso existiert die gleiche Funktionalität.

input_var = input("Enter something: ")
print ("you entered " + input_var) 

Dokumentation der Änderung

  • 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


Benutzeravatar von David Webb
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.

Vhaeruns Benutzeravatar
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

Benutzeravatar von Viswesn
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'>

Benutzeravatar von Simon Peverett
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

1443440cookie-checkBenutzereingaben und Befehlszeilenargumente [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy