Seite 1 von 1

input mit Initial-Wert

Verfasst: Samstag 13. Februar 2021, 21:14
von Holger Chapman
Hallo,

ich möchte in einem Python-Skript einen Wert einlesen ("input") und dabei einen Initial-Wert vorgeben: In der Eingabeaufforderung soll nach dem Prompt ": " zum Beispiel "vorher" stehen, und der Wert lässt sich mit "Return" übernehmen oder aber so ändern, als hätte man vorher "vorher" eingetippt.

In einem Bash-Skript würde ich das wie folgt machen: read -ei "vorher" -p ": " VALUE < /dev/tty

Wie kann ich das in Python (3.9.1) umsetzen?

Vielen Dank!

Re: input mit Initial-Wert

Verfasst: Samstag 13. Februar 2021, 21:37
von __blackjack__
@Holger Chapman: Mit dem `readline`-Modul aus der Standardbibliothek kann man sich so etwas basteln. Ansonsten gibt es externe Bibliotheken. So aus dem Kopf würde mir das prompt_toolkit einfallen, was vielleicht etwas overkill wäre.

Re: input mit Initial-Wert

Verfasst: Samstag 13. Februar 2021, 22:40
von sparrow
@Holger Chapman: Eigentlich ist man von Kommandozeilenprogrammen etwas anderes gewohnt - nämlich dass der "initiale Wert" nicht erst gelöscht werden muss, sondern bei einer leeren Eingabe übernommen wird:

Code: Alles auswählen

Ein Wert (vorher):
So kennte ich das von Konsolenprogrammen. Bestätigt man das einfach ohne Eingabe, wird "vorher" übernommen, ansonsten der eingebene Wert. Das würde also dem entsprechen, was man erwartet. Und man müsste nicht erst nervig etwas löschen, bevor man etwas eigenes eingeben kann.

Code: Alles auswählen

name = "John Doe"
user_input = input(f"Dein Name ({name}): ")
name = user_input if user_input else name
print(name)

Re: input mit Initial-Wert

Verfasst: Sonntag 14. Februar 2021, 11:54
von __blackjack__
@sparrow: Das kommt auf das Programm und die Art der Vorgabe an was nerviger ist. Es gibt auch Situationen da will man *fast* die Vorgabe verwenden, und findet es nervig wenn man statt eine Vorgabe leicht anzupassen, die Eingabe komplett neu tippen muss. Und nervig ist das löschen oder navigieren nur wenn man das alles mit den Cursortasten, Backspace, Entfernen & Co zeichenweise macht. Wenn da beispielsweise ein Pfad steht den ich nicht anpassen sondern komplett ersetzen möchte, dann ist der in der Regel mit einmal Strg+W weg. Und das ist man so von allen Konsolenprogrammen gewohnt die `libreadline` verwenden. Was letztlich ”alle” sind, denn die Programme die das nicht tun, kann man mit `rlwrap` oder einem ähnlichen Programm starten und schon hat man die ganze `libreadline`-Magie inklusive Eingabeverlauf, suchen da drin, und so weiter.

Re: input mit Initial-Wert

Verfasst: Sonntag 14. Februar 2021, 20:03
von Holger Chapman
Danke für eure Antworten!
Ich hab's mir ehrlich gesagt leichter vorgestellt. Nur mit der Standardbibliothek scheint es keine Möglichkeit zu geben, die Betriebssystem-unabhängig (auch unter Windows) halbwegs sauber funktioniert.
Ich werd jetzt erstmal ohne (editierbaren) Standardwert weitermachen. Aber bei Gelegenheit sehe ich mir gerne das prompt_toolkit genauer an.
Viele Grüße


Holger