Hey Leute!
Ich versuche aus einem Raspberry Pi 4 und meinem EPSON LQ Nadeldrucker eine "Schreibmaschiene" zu bauen. Ist es möglich, statt Line-By-Line jeden Buchstaben den ich eingebe einzeln zu drucken? Ich komme nämlich nicht weiter.
Mein aktuelles Script:
import os
import sys
import termios
import tty
# Pfad zum USB-Drucker
DRUCKER_USB_PORT = '/dev/usb/lp0'
# Funktion, um eine Taste direkt ohne ENTER zu lesen
def lese_taste():
fd = sys.stdin.fileno()
alte_einstellungen = termios.tcgetattr(fd)
try:
tty.setraw(fd)
taste = sys.stdin.read(1) # Liest genau 1 Zeichen
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, alte_einstellungen)
return taste
# Verbindung zum Drucker öffnen
if not os.path.exists(DRUCKER_USB_PORT):
print(f"Der Drucker wurde nicht unter {DRUCKER_USB_PORT} gefunden.")
sys.exit(1)
try:
with open(DRUCKER_USB_PORT, 'wb', buffering=0) as drucker: # Ungepufferter Modus
print("Schreibmaschinen-Modus aktiv. Tippe, um zu drucken. Drücke 'Strg+C' zum Beenden.")
while True:
taste = lese_taste() # Zeichen sofort lesen
if ord(taste) == 3: # Strg+C beenden
break
elif ord(taste) == 13: # ENTER (Carriage Return)
drucker.write(b'\r\n') # Zeilenumbruch senden
else:
drucker.write(taste.encode('ascii')) # Zeichen sofort senden
drucker.flush() # Sicherstellen, dass die Daten sofort geschrieben werden
except PermissionError:
print(f"Keine Berechtigung für Zugriff auf {DRUCKER_USB_PORT}.")
print("Führe das Skript mit 'sudo' aus oder ändere die Berechtigungen:")
print(f" sudo chmod 666 {DRUCKER_USB_PORT}")
except Exception as e:
print(f"Ein Fehler ist aufgetreten: {e}")
finally:
print("Verbindung zum Drucker geschlossen.")