lp: Befehl ist nicht vorhanden

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
theoS
User
Beiträge: 108
Registriert: Dienstag 5. November 2019, 21:44

Hallo.
Habe ein Programm zum Labeldrucken für den PI, das läuft auf Cups gut, aber sehr langsam.
Da ich den Cups in Verdacht habe da eine Bremse zu sein, habe ich es mit dem p910d-Druckerserver probiert. Jetzt kam bei dem Programm diese Meldung:

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
    return self.func(*args)
  File "/home/pi/Labeldruck/alles5.02.py", line 276, in on_click
    datei_drucken(string_zum_druck)
  File "/home/pi/Labeldruck/alles5.02.py", line 188, in datei_drucken
    subprocess.run(["lp", "-"], input=text.encode('utf-8'), check=True)
  File "/usr/lib/python3.7/subprocess.py", line 472, in run
    with Popen(*popenargs, **kwargs) as process:
  File "/usr/lib/python3.7/subprocess.py", line 775, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.7/subprocess.py", line 1522, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'lp': 'lp'
Wenn ich irgendeinen Befehl mit lp eingebe (lpstats oder lpoptions) kommt wie auch bei dem Versuch damit zu drucken die Meldung dass entweder das Kommando oder der Befehl nicht gefunden wurde.
Ob mit sudo oder als normaler user.
Wenn ich mit »cat test.txt > /dev/usb/lp0« eine Datei mit den Druckerbefehlen (die in der Variablen im Pythoncode zu lp geschickt werden) dann druckt der Drucker fröhlich sein Hallo Welt.
Hatte von euch schon mal das Problem?
Wenn ich google komme ich immer auf Seiten mit Cups oder Empfehlung dies und das mit lpxxx zu tun, aber das ist nicht da.
Installieren kann ich das ja auch nicht.
:?:
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Warum schreibst du nicht auf /dev/usb/lp0, wenn das doch geht?
theoS
User
Beiträge: 108
Registriert: Dienstag 5. November 2019, 21:44

sparrow hat geschrieben: Montag 11. Mai 2020, 22:55 Warum schreibst du nicht auf /dev/usb/lp0, wenn das doch geht?
Okay, die ehrliche Antwort ist die, dass ich den Befehl dazu nicht umsetzen kann.
Diese function macht den Druck mit subprocess:

Code: Alles auswählen

def datei_drucken(text):
    #print(text) #zum Ausgeben ZLP-Code falls mal was dran geändert werden muss
    subprocess.run(["lp", "-"], input=text.encode('utf-8'), check=True)
(Den Code hat mir netterweise Sirius3 gegeben :geek: )
und bei cat oder auch lpr habe ich bisher nur Dateien gedruckt. Mit Text mochte das nicht auf /dev/usb/lp0 drucken. Das steht auch nirgendwo in einer der Dokus die ich gelesen hab, da geht das immer nur mit Dateien.
Gut, aber ich habe lp wieder. Musste ein wenig suchen, dann hab ich lprng installiert und das hatte das dabei.
Jetzt habe ich nur noch das Problem, dass lp brav sagt, dass es einen "request id is pi@rhaspberrypi-###" hat aber am Drucker rührt sich nix.
Das liest sich doch schon mal ein wenig schöner an. Auch wenn ich jetzt auf einem anderen Schlauch stehe. :?
theoS
User
Beiträge: 108
Registriert: Dienstag 5. November 2019, 21:44

Nachtrag:
Manchmal kommt man auf das Einfachste nicht. (Man hat ja kein Windows...)
Nachdem ich lpr ein paar mal neu gestartet hab, hab ich mal den ganzen PI neu gestartet. Eh ich michs versah, hatte ich eine Schlange von 15 Labels die ruckzuck gedruckt waren.
Das haut hin und um Längen schneller als mit Cups.
Ich danke Euch fürs Mitdenken!
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@theoS: `datei_drucken()` ist für eine Funktion die gar keine Datei druckt ein irreführender Name.

Wenn man die Daten direkt in die Datei unter der der Drucker erreichbar ist, schreiben kann, dann geht das ganz einfach in dem man die Datei öffnet und den Text dort rein schreibt:

Code: Alles auswählen

def text_drucken(text):
    with open("/dev/usb/lp0", "w", encoding="utf-8") as printer:
        printer.write(text)
Nachteil wenn man so etwas an CUPS oder einem anderen Spooler vorbei macht, ist natürlich das es beispielsweise keine Druckerwarteschlange gibt in der Aufträge verbleiben können, falls der Drucker nicht eingeschaltete oder angeschlossen ist, oder aus anderen Gründen nicht bereit ist zu drucken.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten