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

Sebastian Wiesner lunaryorn at gmail.com
Mi Nov 7 13:21:55 CET 2012


Am 7. November 2012 13:10 schrieb Thomas Rachel <
nutznetz-0c1b6768-bfa9-48d5-a470-7603bd3aa915 at spamschutz.glglgl.de>:

> Am 07.11.2012 09:41 schrieb J. Wehlack:
>
>
>> Hallo,
>>
>> ich bin Python Anfänger und komme da an einem Punkt nicht weiter. Ich
>> hoffe hier kann mir jemand helfen.
>>
>> Meine Aufgabe vereinfacht dargestellt:
>>
>>   cat datei.pdf | drucken.py
>>
>> Innerhalb von drucken.py soll die Standardeingabe von drucken.py
>> an die Standardeingabe von lpr weitergegeben werden, in Ergebsnis
>> so wie
>>
>>   cat datei.pdf | lpr -U user1 -P  printer1
>>
>> Mein Ansatz ist:
>>   #Variablen DrIP,Drucker,User sind gesetzt,
>>   DrAufruf='/usr/bin/lpr -H '+DrIP+':631 -P '+Drucker+' -U '+User
>>   dr = subprocess.Popen(DrAufruf, stdin=subprocess.PIPE, shell=True)
>>
>> Ich denke, nun müsste ich mit Popen.communicate() die Daten von stdin
>> des laufenden drucken.py zum Subprozess senden,
>>
>
> Verbesserung vorweg:
>
> DrAufruf=['/usr/bin/lpr', '-H', DrIP+':631', '-P', Drucker, '-U', User]
> dr = subprocess.Popen(DrAufruf, stdin=subprocess.PIPE)
>
> Und nun hast Du ein dr mit einem stdin-Attribut.
>
> Da kannst Du nun
>
> for line in sys.stdin:
>     print >>dr.stdin, line
> (bin mir da nicht ganz sicher mit den Zeilenumbrüchen)
>
> oder
>
> 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)


>
> Oder aber Du machst
>
> dr = subprocess.Popen(DrAufruf)
>
> und Dein Prozeß erbt Dein stdin. Da solltest Du dann nicht selbst von
> lesen. Dürfte einfacher sein als das andere.
>
>
> Thomas
>
>
> ______________________________**_________________
> python-de maillist  -  python-de at python.org
> http://mail.python.org/**mailman/listinfo/python-de<http://mail.python.org/mailman/listinfo/python-de>
>
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://mail.python.org/pipermail/python-de/attachments/20121107/7eaff46d/attachment.html>


Mehr Informationen über die Mailingliste python-de