Das gelingt mir nur zur Hälfte. Es werden nicht alle Bytes geschrieben. Wieso? Hört die Schleife vielleicht zu zeitig auf? Hat das was mit Buffer zu tun?
Ich drucke aus notepad.exe über einen PCL-Treiber den Text "Hello world!". Wenn ich den Druck manuell in eine Datei umleite, erhalte ich 8.654 Bytes. Nutze ich den Python-Code unten, werden nur 3.923 Bytes geschrieben.
Ich benutze (gekürzt auf Hauptfunktion):
Code: Alles auswählen
import sys
import os
import time
import tempfile
def stdin_to_file(jobRoot):
temp = tempfile.mkstemp(prefix=time.strftime("%Y-%m-%d_%H-%M-%S_"), dir=jobRoot)
f = open(temp[1], "wb")
for line in sys.stdin:
f.write(line)
f.close()
def main():
if len(sys.argv) <= 1:
print "usage: %s <DIR>" % os.path.basename(sys.argv[0])
sys.exit(1)
stdin_to_file(sys.argv[1])
if __name__ == "__main__":
main()
Code: Alles auswählen
RedMon - Redirection Port Monitor
Copyright (C) 1997-2001, Ghostgum Software Pty Ltd. All Rights Reserved.
2001-10-28 Version 1.7
Environment:
[...a list of environment variables...]
REDMON_PORT=RPT1:
REDMON_JOB=8
REDMON_PRINTER=My Printer
REDMON_MACHINE=\\PC123
REDMON_USER=Administrator
REDMON_DOCNAME=test.txt - Editor
REDMON_FILENAME=
REDMON_SESSIONID=0
REDMON StartDocPort: returning 1
"C:\test\rpt.exe" C:\test\rpt.log y pcl n C:\test C:\test C:\WINDOWS\notepad.exe {{out}}
Printer=My Printer
JobId=8
REDMON WriteThread: started
Level=1
DocumentName="test.txt - Editor"
OutputFile="(null)"
Datatype="RAW"
output=0 show=0 delay=300 runuser=0
REDMON WritePort: about to write 8654 bytes to port.
[...The 8.654 bytes are written here...]
REDMON WritePort: OK count=8654 written=8654
REDMON EndDocPort: starting
REDMON WriteThread: ending
(3, 'C:\\test\\2010-12-20_16-13-05_5pjkvj.pcl')
2010/12/20 16:13:07: INFO
The program's output messages:
2010/12/20 16:13:07: INFO
The program's error messages:
REDMON EndDocPort: process finished after 2 seconds
REDMON EndDocPort: 0 bytes written to printer
REDMON EndDocPort: ending