Tasten in Console lesen?

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

Über

Code: Alles auswählen

os.system('read -n1')
kann ich Zeichen einlesen ich möchte aber auch Tasten wie 'strg' lesen können.
Geht das und wen ja wie?
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:


GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Ich würde da ja eher curses vorschlagen (insbesondere getch)
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

geht das bei Curses auch ohne "Fenster" ?
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
BlackJack

@Pygoscelis papua: Nein. Die Frage ist was Du tatsächlich lösen möchtest. Wenn man Strg erkennen möchte, dann ist das etwas für das normale Textmodusanwendungen mit ihren drei Standarddateien für ein- und ausgabe nicht direkt gedacht sind, das ist letztendlich ein ”GUI”-Programm, egal ob man dafür nun tatsächlich grafische Fenster oder eine Fensterbibliothek für das Terminal verwendet. Dafür gibt es `curses` in der Standardbibliothek oder zum Beispiel `urwid` als externe Bibliothek. Ansonsten müsste man selber direkt mit dem Terminal kommunizieren und hoffen dass das dann am Ende auch mit jedem Terminal funkioniert was man da programmiert hat. Dafür sind Bibliotheken wie `curses` ja da, dass man von den verschiedenen Terminals abstrahiert.

Das ``read -n1`` ist übrigens auch nicht unbedingt portabel, das kann nicht jede Shell, insbesondere ist das wohl nicht POSIX:

Code: Alles auswählen

$ read -n1
dash: 1: read: Illegal option -n
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

Und wie geht das dann, wenn ich keine Curses Fenster haben möchte?
Ich wollte damit mir Programme machen, die ich gut in andere einbaue kann.
Das geht ja mit curses schlecht.
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@Pygoscelis papua: was meinst Du mit "Programm, die man in andere einbauen kann"?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ah, es geht nur um ein Zeichen-Eingabe...

Dafür gibt es eine Plattform unabhängige Lösung hier: https://bitbucket.org/techtonik/python-pager/

Siehe auch: http://www.python-forum.de/viewtopic.ph ... 85#p261585

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

Also das kann man dann ganz normal auf der Console nutzrn und man kann damit auch "strg" und "F1" ... lesen?
Gibt es auch eine Anleitung oder so?
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
BlackJack

@Pygoscelis papua: Die API-Dokumentation ist dort doch auf der Seite. Einfach mal runterscrollen.

F1 kann das vielleicht als ”Zeichen” liefern, Strg wohl eher nicht weil das ja noch weniger ein Zeichen ist.

Du hast die Frage von Sirius3 nicht beantwortet. Ich ergänze die Frage mal um: Nenn mal ein existierendes Beispiel von dem was Du vorhast. Meine Vermutung: Da gibt's keines. Textmodusprogramme die auf die Strg *alleine* reagieren sind immer TUI-Programme die mit curses, newt, oder einer ähnlichen Bibliothek erstellt wurden. (Oder sie machen das was die Bibliotheken machen auf einer tieferen Ebene selber, aber warum sollte man so etwas machen wollen wenn `curses` doch in der Standardbibliothek ist.)
Antworten