mit lpr zeile für zeile drucken

philippe

Member
hallo miteinander

kann mir jemand verraten, wie ich mittels "lpr" zeile für zeile
an einen nadeldrucker senden kann? besten dank.

philippe
 
Mh, Nadeldrucker... ist schon so lange her. Ich sag mal:

lpr <Textfile>

Wenn das nicht hilft, ist sicher man printcap, man lpr und letztlich /usr/ports/print/apsfilter dein Freund.
 
das ganze sollte folgendes verhalten aufweisen:

tail -f $LOGFILE
# representiert den drucker

echo "logeintrag von app1" >> $LOGFILE
# eine zeile wird am drucker ausgedruck

# echo "noch ein einrag, app2" >> $LOGFILE
# eine weitere zeile wird ausgedruckt...



mein problem ist das die seite nach einem
$ lpr $LOGFILE
komplett ausgedruckt wird.


vielleicht war ich etwas zu genau in der formulierung.
 
Verstehe ich dich richtig, dass laufend nur die neu hinzugekommenen "Zeilen" ausgedruckt werden soll (aus dem Logfile)? Wenn ja, dann müsstest du sicher in Richtung:

tail -f Logfile | lpr

oder

tail -f Logfile > /dev/lpt0

probieren. Hab das nie gemacht, seh es daher als Vorschlag.
 
Er müsste es auch noch durch einen Filter jagen um jedem Line-Feed ein Carriage-Return anzuhängen. Das könnte man dann tatsächlich direkt nach /dev/lpt0 schicken.
 
besten dank für eure beiträge!

ja die idee ist, dass nur die neuen zeilen gedruckt werden (auf endlospapier) das ziel ist es, die logs aus diversen applikationen, für auswertungen auf papier zu "loggen" (=drucken).

wie sieht ein solcher filter aus? ist das einfach ein skript, welches die "\n" in cr's im string/stream umwandelt - sprich ersetzt?
 
hi phillipe!
ich hab dein problem nicht 100% verstanden...
meinst du dass der nur so treppenstufenartig druckt?
dann sollte eigentlich
Code:
% tail -f logfile | unix2dos | cat >/dev/lpt0
schon das sein was du willst.

oder hast du das problem dass du eine zeile immer genau dann drucken moechtest wenn sie gerade angekommen ist? und sich nicht erstmal im druckerpuffer langweilt?
dann empfehle ich dir (keine ahnung ob das funktioniert) einfach mal ein c-proggie zu schreiben, welches nach einem \n immer 1kb an \0 schreibt. ob das so funktioniert, kannst du sehen wenn du
Code:
% echo hallo >/dev/lpt0
% dd if=/dev/zero of=/dev/lpt0 bs=1k count=1
eingibst.
weiss ich aber auch nicht, ich hab keinen drucker und kanns leider nicht testen. sorry!
 
Tritt denn dieses cr/lf-Problem nun tatsächlich auf?

Wenn ja, dann kann man in printcap auch den Filter einbauen (if). Mir ist auch noch so, als konnte man bei den epson-kompatiblen über Dip-Switch bzw. Konf-Menue das CR/LF verhalten einstellen.

Gruss
 
besten dankt für eure hilfestellungen., resp. beiträge!

ich kann leider heute nicht physikalisch auf den drucker zugreifen und muss das
morgen testen. ich werde mich melden sobald ich das diskutierte ausgetestet habe. ich wünsche euch allen einen schönen sonntag!!

philippe
 
gueten abend!

sorry, dass ich mich erst so spät melde - ich lag krank im bett. egal.
also das ganze sieht so aus:
wenn ich von der konsole aus eine
Code:
echo -e "blah\n" > /dev/lp0
sende, dann funktioniert alles super, der drucker nadelt die linie aufs papier und gut ist.


wenn ich aus einem script (zB python) in die "drucker datei" schreiben will, werden die \n einfach ignoriert.
Code:
...
msg = "hello printer\n"
f = open("/dev/lp0", "wb") 
f.write(msg)
f.close()
...

irgendwie werden alle steuerzeichen in "plain text" ausgedruckt.... :(
kann jemend weiterhelben? oder bin ich dazu gezwungen ein echo aus python aufzurufen? :zitter:
 
hehe! :) ja hab ich. soeben.
das "w" führt auch zu problemen. eine fuktionierende kombination ist
Code:
			f = open("/dev/lp0", "ab") 
			f.write(msg + "\n\r") # wichtig wenn übers netz!
			f.close()
mein problem kam aber daher, dass ich die steuerzeichen im stream, der übers netz geht, verpackt habe - die gingen irgendwie verlohren. danke euch allen - so funktionierts.
 
Zurück
Oben