[Python-de] subprocess: Python 2 <> 3

Peter Otten __peter__ at web.de
Mo Nov 7 11:33:37 CET 2011


Hartmut Goebel wrote:

> Am 06.11.2011 19:34, schrieb Peter Otten:
>>>> wird das Programm in Python 2 ausgeführt wird, läuft es so wie soll:
>>>> Die Bildschirmausgabe wird nicht aktualisiert, nur das letzte Ausgabe
>>>> des Programmes erscheint.
> 
> Wenn ich das richtig verstehe, soll nur die allerletzte Zeile ausgegeben
> werden. Und flac liefert, wenn man es normal in der Shell aufruft, einen
> Fortschritts-Ausgabe die immer in der gleichen Zeile steht, korrekt?
> 
> Ist stdout im "universal newline"-mode geöffnet? print (sys,stdout.mode)
> 
> Dann hilft diese Lösung nicht.
>> Oder die Bytes unverändert weiterreichen:
> 
> Denn damit werden weiterhin alle Zeichen an die Console ausgegeben. Du
> möchtest also die letzte Zeile abschneiden und nur die ausgeben.
> 
> stdout, stderr = proc.communicate()
> sys.stdout.buffer.write(stderr.splitlines()[-1])

Ich hab ihn so verstanden, dass er die Programmausgabe der Struktur

>>> output = b'whatever\nintermediate\rfinal       \n'

als

whatever
final

auf dem Bildschirm sehen will. Das geht mit

>>> print(output)
b'whatever\nintermediate\rfinal       \n'

nicht, wohl aber mit

>>> sys.stdout.buffer.write(output)
whatever
final
35

Das entstricht dem, was man unter 2.x sehen sollte. Falls die hier mit 
"whatever" dargestellten Zeilen wegfallen sollen, hast du natürlich recht.



Mehr Informationen über die Mailingliste python-de