Seite 1 von 1

String editieren

Verfasst: Samstag 12. März 2005, 19:58
von jphan
Wie kann ich innerhalb eines Scripts einen vordefinierten String (aus einer Variablen) interaktiv editieren und anschließend wieder in eine andere Variable zurücklesen? Danke im Voraus!

Verfasst: Samstag 12. März 2005, 20:25
von mawe
Hi!

Mir ist nicht ganz klar was Du meinst ("interaktiv editieren"?).Kannst Du bitte mal ein Beispiel zeigen.

Gruß, mawe

String editieren

Verfasst: Samstag 12. März 2005, 21:31
von jphan
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

Verfasst: Samstag 12. März 2005, 21:47
von Leonidas
Wie wäre es damit:

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
Allerdings brauchst du unter Windows readline aus den uncpythontools.

String editieren

Verfasst: Samstag 12. März 2005, 22:08
von jphan
Hallo,

danke! Ich versuche es mal!

Es wäre sehr praktisch, wenn raw_input noch ein zweites Argument akzeptieren würde,
etwa so: raw_input(prompt, default).....

Grüße, jphan

Verfasst: Samstag 12. März 2005, 22:21
von Leonidas
Ist auch möglich und wenn man Klassen verwendet vermeidet man global.

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
Edit: Man kann dann noch einige Tricks einsetzen um raw_input vollständig zu ersetzen, aber ob das ratsam ist, ist eine andere Sache.

String editieren

Verfasst: Samstag 12. März 2005, 23:34
von jphan
Hallo,

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
Grüße, jphan