Hallo,
mich würde mal interessieren ob und wie man die Ein-/Ausgabe in der Shell löschen kann.
Damit meine ich man hat z.B. eine Ausgabe "Bitte drücke Enter..."
Wenn man dann Enter drückt soll die Shell "Leer" sein und ein neuer Text erscheinen.
Ich habe schon Codes gefunden bei denen die Shell "geleert" wird aber man auch aus dem Programm geschmissen wird.
Geht das auch das man trotzdem noch im Programm bleibt oder geht das nicht?
Mfg Boggel
Shell Eingabe Löschen
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Erst mal sollte man überlegen ob man das wirklich will, denn die meisten Anwender sind sauer wenn man ihnen einfach so Inhalte aus dem Terminal löscht. Deshalb stellen Programme das Terminal komplett benutzen am Programmende die alte Ausgabe normalerweise wieder her.
Ansonsten schau Dir mal das `curses`-Modul an (muss man unter Windows extern installieren) oder vielleicht auch so etwas wie das externe `prompt_toolkit`. `click` hat auch eine Hilfsfunktion um das Terminal zu leeren.
Ansonsten schau Dir mal das `curses`-Modul an (muss man unter Windows extern installieren) oder vielleicht auch so etwas wie das externe `prompt_toolkit`. `click` hat auch eine Hilfsfunktion um das Terminal zu leeren.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- DeaD_EyE
- User
- Beiträge: 1020
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Solche kleinen Aufgaben hab ich mit Ansi Escape Sequenzen gelöst.
Ist aber nur mit Linux und vielleicht MacOS kompatibel.
https://stackoverflow.com/questions/377 ... -character
Wenn man nur irgendeinen Status mal eben in der Konsole ausgeben will und diesen Status auch aktualisieren will, fängt man nicht unbedingt an ein komplettes neues Framework zu lernen.
Curses ist sehr low level. Wer Curses beherrscht hat verstanden wie Terminals funktionieren. Sicherlich ist aufgefallen, dass flush=True ist. Manchmal wird der Buffer nicht geleert und dann
wird auch nichts im Terminal ausgegeben. Das ist der Nachteil, wenn man alles zu Fuß macht. Das passiert vor allem in Schleifen.
Die vorgeschlagene Lösung stellt den Inhalt nicht wieder her.
Wenn du ein bisschen betrügen willst, kannst du das Programm tput verwenden. Rein von der Theorie her, macht es das selbe wie curses, nur über Befehle und parameter.
Wenn man den Contextmanager nun aufruft, wird durch tput smcup der Inhalt des Terminals gespeichert. Der Befehl tput rmcup stellt den alten Inhalt wieder her.
Beispielcode:
Ist aber nur mit Linux und vielleicht MacOS kompatibel.
https://stackoverflow.com/questions/377 ... -character
Code: Alles auswählen
def cls_home_print(text):
"""
Clear Screen
Back to home position
Print the text without linebreak
"""
print('\033[2J\033[H', end='', flush=True)
print(text, end='', flush=True)
Curses ist sehr low level. Wer Curses beherrscht hat verstanden wie Terminals funktionieren. Sicherlich ist aufgefallen, dass flush=True ist. Manchmal wird der Buffer nicht geleert und dann
wird auch nichts im Terminal ausgegeben. Das ist der Nachteil, wenn man alles zu Fuß macht. Das passiert vor allem in Schleifen.
Die vorgeschlagene Lösung stellt den Inhalt nicht wieder her.
Wenn du ein bisschen betrügen willst, kannst du das Programm tput verwenden. Rein von der Theorie her, macht es das selbe wie curses, nur über Befehle und parameter.
Code: Alles auswählen
import time
import subprocess
from contextlib import contextmanager
@contextmanager
def restore_terminal():
subprocess.Popen(['tput', 'smcup']).wait()
yield
subprocess.Popen(['tput', 'rmcup']).wait()
Beispielcode:
Code: Alles auswählen
print('Hello World')
time.sleep(2)
with restore_terminal():
for i in range(10):
cls_home_print(i)
time.sleep(0.1)
time.sleep(2)
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server