Machbarkeitsfrage: Kann man mit Python einen Druckserver (Line Printer) umsetzen?
Hat jemand Ideen für Ansätze, Tutorials zum Nachlesen etc.?
Möchte quasi die RAW-Druckdaten von einen normalen Windows-Drucker (PostScript- oder PCL-Druckertreiber) empfangen, der als Anschluss mit dem Standard TCP/IP Port eingerichtet ist. Die Daten sollen temporär gespeichert und später weiter verarbeitet werden.
LP-Druckserver mit IPP
Wie würdest du das umsetzen? Socket Server und einfach die Rohdaten empfangen?
Der Windows-Spooler erwartet ja sowas wie eine Rückmeldung vom Drucker, ob die Daten alle angekommen sind, ob der Drucker bereit ist etc. -> weiß nicht genau was ein Line Printer Daemon alles können muss. Dafür suche ich Ansätze.
Der Windows-Spooler erwartet ja sowas wie eine Rückmeldung vom Drucker, ob die Daten alle angekommen sind, ob der Drucker bereit ist etc. -> weiß nicht genau was ein Line Printer Daemon alles können muss. Dafür suche ich Ansätze.
Das hab ich mir vorab auch schon angesehen
Da Programmierer aber faul sind, möchte ich erstmal nur das Nötigste umsetzen... und nicht gleich nach RFC coden.
Weiß jemand, was davon unabdingbar ist, damit ich dem Windows-Spooler ein OK oder einen Fehler signalisieren kann?

Weiß jemand, was davon unabdingbar ist, damit ich dem Windows-Spooler ein OK oder einen Fehler signalisieren kann?
So, habe nun das Grundgerüst für den TCPServer fertig. Ich kann Daten vom Windows-Spooler empfangen.
Es hängt nun an der Verständigung über das Line Printer Daemon Protocol, genauer gesagt an folgender Stelle im RFC 1179:
Es hängt nun an der Verständigung über das Line Printer Daemon Protocol, genauer gesagt an folgender Stelle im RFC 1179:
Wie bekomme ich aus den empfangenen Rohdaten den Octet-Code raus?3.1 Message formats
[...] All commands begin with a single octet code, which is a
binary number which represents the requested function. The code is
immediately followed by the ASCII name of the printer queue name on
which the function is to be performed.
So ein Octet ist pure Magie: http://en.wikipedia.org/wiki/Octet_(computing) ^^
Durch kurzes Scrollen vermute ich mal, dass das erste Byte jeder Nachricht für das Kommando steht. Wenn du die Rohdaten hast, dann sollte das kein Problem sein.
Durch kurzes Scrollen vermute ich mal, dass das erste Byte jeder Nachricht für das Kommando steht. Wenn du die Rohdaten hast, dann sollte das kein Problem sein.
Das Leben ist wie ein Tennisball.
Spricht du mit ironischer Stimme... ?EyDu hat geschrieben:So ein Octet ist pure Magie: http://en.wikipedia.org/wiki/Octet_(computing) ^^
Durch kurzes Scrollen vermute ich mal, dass das erste Byte jeder Nachricht für das Kommando steht. Wenn du die Rohdaten hast, dann sollte das kein Problem sein.

Mir ist schon klar was ein Octet ist, aber das erste Byte (8 Bit = Octet) der Rohdaten sieht aus wie ein Sonderzeichen und nicht wie die im RFC angegebenen Codes 1, 2, 3, ...
Daher meine Frage, ob ich den Rohdaten-String erst noch umwandeln muss, bevor ich ihn parse.
P.S. Gibt es denn eigentlich noch niemanden, der einen LPD-Server in Python geschrieben hat... ? Ich bin sicherlich nicht der erste.
@droptix: Was heisst "sieht aus wie ein Sonderzeichen"? Welchen *Wert* hat das Byte denn?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Naja, es hat vermutlich, wie im RFC steht, den Wert 1, 2 oder 3 oder ähnlich wodurch es ein non-printable Character ist.BlackJack hat geschrieben:@droptix: Was heisst "sieht aus wie ein Sonderzeichen"? Welchen *Wert* hat das Byte denn?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Aaaah, ihr meint den Wert, der bei ord(myString[0]) rauskommt? Muss ich testen...
Da ich weiter unten im RFC auch ASCII-Buchstaben gelesen hatte, bin ich von druckbaren Zeichen ausgegangen:
Danke für den Denkanstoß!
Da ich weiter unten im RFC auch ASCII-Buchstaben gelesen hatte, bin ich von druckbaren Zeichen ausgegangen:
Aber da steht nun extra "printable".7. Control file lines
This section discusses the format of the lines in the control file
which is sent to the line printer daemon.
Each line of the control file consists of a single, printable ASCII
character which represents a function to be performed when the file
is printed.
Danke für den Denkanstoß!