Python Raspberry Pi Terminalfenstergröße über Befehl einstellen

DMHas

Lt. Commander
Registriert
Sep. 2005
Beiträge
1.633
Hallo zusammen,

ich wage mich gerade an Python3 heran. Die ersten kleinen Routinen laufen auch schon. Jetzt möchte ich die Terminalfenstergröße auf eine Mindestgröße einstellen. Unter Windows klappt das perfekt. Aber auf dem Raspberry Pi bekomme ich das nicht hin. Das Modul 'os' bietet nichts dahin an.

Unter Windows sieht das so aus:
Python:
# Fenstergröße abfragen unter Windows | wenn kleiner 30 Zeilen / 120 Spalten dann Fenster ausdehnen
breite , höhe = os.get_terminal_size()
if höhe < 30 or breite < 120:
    os.system("mode con cols=120 lines=30")

Aber für den Raspberry Pi habe ich keine ähnliche Möglichkeit gefunden. Ich weiß das "mode con" den DOS-Befehl "mode" aufruft und so die Terminalgröße einstellt. Daher klappt der Befehl für den Raspberry Pi nicht. Gibt es da noch eine andere Möglichkeit für mein Anliegen?
 
Du musst halt rausfinden, wie das ganze fuer Linux funktioniert. os.system amcht ja nichts anderes, als einen terminalbefehl abzusetzen. Das da ein Windows befehl nicht geht, ist klar.
 
NJay schrieb:
Du musst halt rausfinden, wie das ganze fuer Linux funktioniert. os.system amcht ja nichts anderes, als einen terminalbefehl abzusetzen.
Genau das ist der Grund, warum ich hier im Forum frage. Ich bin mir bewußt, das ein Windowsbefehl nicht unter Linux geht. Meine Linux-Kentnisse sind mehr äußerst gering. Daher hoffe ich auf ein paar Denkanstöße von den Forumsmitgliedern, wie ich das umsetzen kann.
 
Die Terminalgröße stellst du direkt bei deinem Terminalprogramm ein, nicht über ein darin ausgeführtes anderes Programm.
 
up.whatever schrieb:
Die Terminalgröße stellst du direkt bei deinem Terminalprogramm ein, nicht über ein darin ausgeführtes anderes Programm.
Die Möglichkeit kenne ich. Ich möchte aber sicherstellen, dass das Terminalfensters eine Mindestgröße hat und dies direkt aus dem Programm heraus sicherstellen. (Die Grundeinstellung der Terminalfenstergröße von Windows und LXTerminal (X session) sind unterschiedlich.)
 
Wenn du eine bestimmte Mindestgröße benötigst, kannst du die aktuelle Größe auslesen und bei Bedarf dein Programm mit einer Fehlermeldung abbrechen lassen.
Wäre ja noch schöner, wenn mir jede x-beliebige Software einfach so mein Terminal resizen könnte.
 
Manche Terminals lassen tatsächlich eine Größenänderung durch die Software zu.
Die Escape-Sequenz lautet <ESC>[8;<Höhe>;<Breite>t
Quelle:
https://stackoverflow.com/questions/5243445/bash-command-to-change-size-of-bash-window

Der Code-Schnipsel:
Python:
import os
import sys

def ensure_console_size(min_w, min_h):
    w, h = os.get_terminal_size()
    change = False
    if w < min_w:
        w = min_w
        change = True
    if h < min_h:
        h = min_h
        change = True

    if change:
        if sys.platform == 'linux':
            sys.stdout.write("\x1B[8;"+str(h)+";"+str(w)+"t")
        else:
            os.system("mode con cols="+str(w)+" lines="+str(h))

ensure_console_size(120, 30)
Hab noch den Bugfix eingebaut, dass das Fenster jeweils in Breite/Höhe nie verkleinert wird. Wenn du nämlich 80x60 hast, dann würde das Programm bei einfacher Abfrage die Größe stur auf 120x30 ändern, statt einfach die Breite von 80 auf 120 zu erhöhen.

Unter Linux Mint und Putty (Windows) hat es geklappt. Kannst mal testen, ob es bei dir auch geht.
Ich empfehle, die Funktion sparsam bzw. erst bei expliziter Freigabe per Extra-Parameter einzusetzen, sonst sind deine Anwender schnell genervt, wenn dein Code sich einfach am Terminalfenster vergreift.
 
  • Gefällt mir
Reaktionen: DMHas, up.whatever und Hayda Ministral
up.whatever schrieb:
Wenn du eine bestimmte Mindestgröße benötigst, kannst du die aktuelle Größe auslesen und bei Bedarf dein Programm mit einer Fehlermeldung abbrechen lassen.
Wäre eine Möglichkeit! Aber ich muß gestehen, es ist nicht gerade eine benutzerfreundliche Lösung!

@Gliese: Danke für deinen Beitrag! Werde ich gleichmal testen. Ich will nur eine Mindestengröße absichern.

Update: Leider klappt das mit der Escape-Sequenz nicht auf dem Raspberry Pi (LXTerminal). Aber trotzdem Danke!
 
Zuletzt bearbeitet:
Zurück
Oben