input mit Initial-Wert

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Holger Chapman
User
Beiträge: 31
Registriert: Samstag 12. Juli 2014, 01:59

Samstag 13. Februar 2021, 21:14

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!
Benutzeravatar
__blackjack__
User
Beiträge: 8716
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Samstag 13. Februar 2021, 21:37

@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.
long long ago; /* in a galaxy far far away */
Benutzeravatar
sparrow
User
Beiträge: 2709
Registriert: Freitag 17. April 2009, 10:28

Samstag 13. Februar 2021, 22:40

@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)
Benutzeravatar
__blackjack__
User
Beiträge: 8716
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Sonntag 14. Februar 2021, 11:54

@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.
long long ago; /* in a galaxy far far away */
Holger Chapman
User
Beiträge: 31
Registriert: Samstag 12. Juli 2014, 01:59

Sonntag 14. Februar 2021, 20:03

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
Antworten