String editieren
Hallo,
gebe zu, habe mich unklar ausgedrückt.
Also: Innerhalb des Ablaufs eines Scripts (nicht erst nach Beendigung am Prompt) möchte ich einen String an den Bildschirm bringen mit dem Cursor direkt dahinter, den String dann bearbeiten und die veränderte Fassung zurückschreiben, also so eine Art default-Vorgabe für raw_input erzeugen.
------------------------------------------------------
>>> execfile('/home/tmp/fragebogen.py')
.
.
Bitte die Anzahl eingeben:
100 | # der Strich soll den Cursor darstellen
------------------------------------------------------
Jetzt die vorgegebene Zahl editieren und mit Return wieder in eine Variable schreiben.
InteractiveConsole? readline? curses? gngngngn....
Grüße, jphan
gebe zu, habe mich unklar ausgedrückt.
Also: Innerhalb des Ablaufs eines Scripts (nicht erst nach Beendigung am Prompt) möchte ich einen String an den Bildschirm bringen mit dem Cursor direkt dahinter, den String dann bearbeiten und die veränderte Fassung zurückschreiben, also so eine Art default-Vorgabe für raw_input erzeugen.
------------------------------------------------------
>>> execfile('/home/tmp/fragebogen.py')
.
.
Bitte die Anzahl eingeben:
100 | # der Strich soll den Cursor darstellen
------------------------------------------------------
Jetzt die vorgegebene Zahl editieren und mit Return wieder in eine Variable schreiben.
InteractiveConsole? readline? curses? gngngngn....
Grüße, jphan
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Wie wäre es damit:
Allerdings brauchst du unter Windows readline aus den uncpythontools.
Code: Alles auswählen
import readline
def hook(): readline.insert_text("42")
readline.set_pre_input_hook(hook)
answer=raw_input("Sinn des Lebens? ")
print "answer =",answer
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ist auch möglich und wenn man Klassen verwendet vermeidet man global.
Edit: Man kann dann noch einige Tricks einsetzen um raw_input vollständig zu ersetzen, aber ob das ratsam ist, ist eine andere Sache.
Code: Alles auswählen
#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import readline
class raw_input_imp(object):
def __init__(self):
self.default = None
readline.set_pre_input_hook(self.hook)
def hook(self):
if self.default:
readline.insert_text(self.default)
def raw_input(self, text, default=None):
self.default = default
return raw_input(text)
if __name__ == '__main__':
rii = raw_input_imp()
answer = rii.raw_input("Sinn des Lebens: ", "42")
print "Antwort =", answer
answer = rii.raw_input("Sinn dieses Programms: ")
print "Antwort =", answer
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Hallo,
danke für die prima Anregungen!
So funktioniert es erstmal:
Grüße, jphan
danke für die prima Anregungen!
So funktioniert es erstmal:
Code: Alles auswählen
import readline
def hook(): readline.insert_text('100 ')
readline.set_startup_hook(hook)
a = raw_input('Bitte Zahl eingeben: ')
print a
readline.set_startup_hook() # Vorgabe wieder entfernen