Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #17767 > unrolled thread
| Started by | MRAB <python@mrabarnett.plus.com> |
|---|---|
| First post | 2011-12-23 02:14 +0000 |
| Last post | 2011-12-23 02:14 +0000 |
| Articles | 1 — 1 participant |
Back to article view | Back to comp.lang.python
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Re: reading multiline output MRAB <python@mrabarnett.plus.com> - 2011-12-23 02:14 +0000
| From | MRAB <python@mrabarnett.plus.com> |
|---|---|
| Date | 2011-12-23 02:14 +0000 |
| Subject | Re: reading multiline output |
| Message-ID | <mailman.4012.1324606465.27778.python-list@python.org> |
On 23/12/2011 02:05, Mac Smith wrote: > > On 23-Dec-2011, at 6:48 AM, MRAB wrote: > >> On 23/12/2011 01:07, Mac Smith wrote: >>> >>> On 23-Dec-2011, at 6:17 AM, MRAB wrote: >>> >>>> On 23/12/2011 00:33, Mac Smith wrote: >>>>> Hi, >>>>> >>>>> >>>>> I have started HandBrakeCLI using subprocess.popen but the output >>>>> is multiline and not terminated with \n so i am not able to read >>>>> it using readline() while the HandBrakeCLI is running. kindly >>>>> suggest some alternative. i have attached the output in a file. >>>>> >>>> The lines are terminated with \r, so read with read() and then >>>> split on "\r". >>> >>> read() will read the complete output and than i will be able to parse >>> it, i want to read the output of the command in realtime. >>> >> Try telling it how much to read with read(size): >> >> def read_lines(output, line_ending="\n"): >> buffer = "" >> >> while True: >> chunk = output.read(1024) >> if not chunk: >> break >> >> buffer += chunk >> >> while True: >> pos = buffer.find(line_ending) >> if pos< 0: >> break >> >> pos += len(line_ending) >> yield buffer[ : pos] >> buffer = buffer[pos : ] >> >> if buffer: >> yield buffer > > thanks, this helped. just need to correct line_ending="\n" should be line_ending="\r" > I wrote the default as "\n" because that's the normal line ending in Python. If, as in your case, the line ending is different, just pass the appropriate string as the second argument.
Back to top | Article view | comp.lang.python
csiph-web