Wie programmiert man mehrzeiliges Editieren in der Kommandozeile?

Hallo,

Ich würde gerne ein Kommandozeilenprogramm mit Python schreiben bei dem man mehrzeiligen Text sowohl eingeben als auch editieren kann. Kann bitte jemand erklären wie das geht und/oder eine Library nennen die das bereits umsetzt?

Viele Grüße
Thomas

Hallo,
das können BSD editline, GNU Readline, andere womöglich auch. Leider gibt es den ZLE (zsh) nicht als library.

1 Like

Hallo,

Danke für die Antwort. Die Lösung wäre dann ja auch nicht für alle Plattformen was man mit Python oder Java anstreben würde. Ich habe bspw. ‚blessed‘ gefunden wo man das selber bauen kann aber doch halt sehr wenig komfortabel.

Ich gebe es noch nicht ganz auf aber im Zweifelsfall muss doch halt eine UI her.

Grüße
Thomas

auf welchen Plattformen laeuft readline und editline (libedit) denn nicht?

Fuer python ist ersteres sogar fertig gepackaged als pyreadline3.

Ja schon, aber es ist nicht gut ersichtlich wie man das im Sinne ‚mehrzeiliges Editieren‘ verwendet (Autocompletion war gut erklärt aber nicht was ich primär gesucht hatte). Ich habe aber eine Alternative gefunden und da ist die Doku herausragend: https://github.com/prompt-toolkit/python-prompt-toolkit.

Dennoch Danke für die Hilfe!

ChatGPT sagt das (ungeprüft!):
Eine Möglichkeit, mehrzeiligen Text in Python von der Kommandozeile aus einzugeben und zu bearbeiten, besteht darin, die „readline“ -Bibliothek zu verwenden. Diese Bibliothek stellt eine Schnittstelle für die Kommandozeileneingabe bereit und ermöglicht das Editieren von mehrzeiligen Eingaben.

Hier ist ein Beispiel für die Verwendung von „readline“ in Python:

import readline

# Funktion zur Eingabe von mehrzeiligen Texten
def multiline_input(prompt=''):
    line = ''
    lines = []
    while line not in ['.', 'quit']:
        line = input(prompt)
        lines.append(line)
    return '\n'.join(lines[:-1])

# Beispiel für die Verwendung der Funktion
text = multiline_input('Geben Sie Ihren Text ein: ')
print('Ihr Text:')
print(text)

In diesem Beispiel wird die Funktion „multiline_input“ definiert, die eine mehrzeilige Eingabeaufforderung anzeigt und den Benutzer dazu auffordert, eine Eingabezeile nach der anderen einzugeben. Der Benutzer kann die Eingabe beenden, indem er eine einzelne Punkt „.“ eingibt oder das Wort „quit“. Die Funktion gibt dann den vollständigen mehrzeiligen Text als Zeichenfolge zurück.

Es gibt auch andere Bibliotheken wie „curses“, „urwid“ oder „npyscreen“, die eine grafische Benutzeroberfläche für die Kommandozeile bereitstellen. Diese Bibliotheken bieten noch mehr Möglichkeiten zur Benutzerinteraktion und -steuerung, erfordern jedoch eine höhere Einarbeitungszeit.