Hallo
Ich hab hier einen stream (bzw. durch popen4 ein dazu passendes Fileobjekt), in dem die Zeilen dummerweise nicht durch \n sondern durch \r getrennt sind (bei der Normalen Ausgabe des Programmes auch sinnvoll, dann wird der Fortschrittsbalken vom Zeilenanfang an neu geschrieben).
Ich will jetzt die Zeilen aber stückweise zur Entstehungszeit einlesen/ausgeben, daher ist ein file.read() unpassend, da das erst terminiert, wenn der Prozess zuende ist.
Man kann jetzt freilich ein file.read(1) machen und jedesmal testen, ob der Rückgabewert "\r" ist, aber gibt es nicht etwas wie file.readline(), daß beim Auftreten eines übergebenen Zeichens abbricht, oder muß ich das selberbasteln?
ciao
chaos
PS python2.4 freeBSD-5.3
file.read() nur bis zu einem bestimmten Zeichen
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Wenn ich die Doku richtig verstehe, sollte es gehen wenn Du mit "rU" öffnest.
Wenn ich die Doku richtig verstehe, sollte es gehen wenn Du mit "rU" öffnest.
Gruß, mawepydoc hat geschrieben: Add a 'U' to mode to open the file for input with universal newline
support. Any line ending in the input file will be seen as a '\n'
in Python. Also, a file so opened gains the attribute 'newlines';
the value for this attribute is one of None (no newline read yet),
'\r', '\n', '\r\n' or a tuple containing all the newline types seen.
scheint zumindestens hier nicht zu gehen:
Code: Alles auswählen
thomas@chaos /tmp % echo "foo\rbar\rfoobar\nend" >foo
thomas@chaos /tmp % cat foo
foobar
end
thomas@chaos /tmp % # die Datei funktioniert also so, wie sie soll.
thomas@chaos /tmp %python
Python 2.4 (#2, Feb 4 2005, 19:06:10)
[GCC 3.4.2 [FreeBSD] 20040728] on freebsd5
Type "help", "copyright", "credits" or "license" for more information.
>>> from os import popen4
>>> a=popen4('cat foo','rU')
>>> a[1].readline()
'foo\rbar\rfoobar\n'
>>> a[1].readline()
'end\n'
>>>
Slackware will never die.
Mist, ich hatte mir nur die Signatur von popen4 angeschaut. Da gibt es ein `mode`, das als Default den Wert 't' besitzt. Der Parameter wird aber gar nicht benutzt. Das sieht man aber erst, wenn man in den Quelltext schaut. Sorry. 
