[Python-de] Hife für Pipe, stdin an Subprozess weitergeben

Hartmut Goebel h.goebel at goebel-consult.de
Mi Nov 7 20:16:28 CET 2012


Am 07.11.2012 13:21, schrieb Sebastian Wiesner:
> Am 7. November 2012 13:10 schrieb Thomas Rachel
> <nutznetz-0c1b6768-bfa9-48d5-a470-7603bd3aa915 at spamschutz.glglgl.de
> <mailto:nutznetz-0c1b6768-bfa9-48d5-a470-7603bd3aa915 at spamschutz.glglgl.de>>:
>
>
>     while True:
>        x = sys.stdin.read(8192)
>        if not x: break
>        sdr.stdin.write(x)
>
>
> Besser:
>
> from shutil import copyfileobj
> copyfileobj(sys.stdin, dr.stdin)

Umständlich und fehleranfällig. Warum nicht gleich:

   subprocess.Popen(DrAufruf, stdin=sys.stdin)

Fertig.

In der Ursprungsfrage ging es aber *nicht* darum, stdin weiter zu
reichen, sondern ggf. selbst erzeugte Daten. Da der OP als beispiel ein
PDF genannt hat, gehe ich davon aus, dass eine große Binärdatei zuerst
gespeichert wird und dann gedruckt. Das wäre dann:

   pdf_file = open(...)
   dr = subprocess.Popen(DrAufruf, stdin=pdf_file).wait()
   pdf_file.close()

Falls die Daten on the fly erzeugt werden, kann folgendes genutzt werden
(ungetestet):
  
   dr = subprocess.Popen(DrAufruf, stdin=PIPE)
   pdfWriter= PdfWriter(... dr.stdin, ...)
   ... pdf erzeugen
   dr.wait()


-- 
Schönen Gruß
Hartmut Goebel
Dipl.-Informatiker (univ), CISSP, CSSLP

Goebel Consult
http://www.goebel-consult.de

Monatliche Kolumne:
http://www.cissp-gefluester.de/2011-02-fleisige-datensammler-fur-lukratives-geschaeftsmodell-gesucht

Blog: http://www.goebel-consult.de/blog/20060215

Goebel Consult ist Mitglied bei http://www.7-it.de/

-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://mail.python.org/pipermail/python-de/attachments/20121107/2f613f0f/attachment.html>
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : smime.p7s
Dateityp    : application/pkcs7-signature
Dateigröße  : 3758 bytes
Beschreibung: S/MIME Kryptografische Unterschrift
URL         : <http://mail.python.org/pipermail/python-de/attachments/20121107/2f613f0f/attachment.bin>


Mehr Informationen über die Mailingliste python-de