Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!us.feeder.erje.net!feeder.erje.net!1.eu.feeder.erje.net!newsfeed.pionier.net.pl!feed.xsnews.nl!border03.ams.xsnews.nl!feeder03.ams.xsnews.nl!abp001.ams.xsnews.nl!frontend-F10-13.ams.news.kpn.nl From: Cecil Westerhof Newsgroups: comp.lang.python Subject: Why does the first loop go wrong with Python3 Organization: Decebal Computing X-Face: "(y8cC@tg_12{">GF'UXTW]FHI2wMiZNrnf'1EFQ&O#$m:f#O7+7}kR,v+Pti8=Vi/Z"g^?b"E X-Homepage: http://www.decebal.nl/ Date: Tue, 19 May 2015 14:24:45 +0200 Message-ID: <878uckvjoy.fsf@Equus.decebal.nl> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) Cancel-Lock: sha1:2JPAX0ALUmTYTY6NeDee23LcOTk= MIME-Version: 1.0 Content-Type: text/plain Lines: 27 NNTP-Posting-Host: 81.207.62.244 X-Trace: 1432038566 news.kpn.nl 21131 81.207.62.244@kpn/81.207.62.244:38394 Xref: csiph.com comp.lang.python:90845 I have the following code: from __future__ import division, print_function import subprocess p = subprocess.Popen('ls -l', shell = True, stdout = subprocess.PIPE) for line in iter(p.stdout.readline, ''): print(line.rstrip().decode('utf-8')) p = subprocess.Popen('ls -l', shell = True, stdout = subprocess.PIPE) for line in p.stdout.readlines(): print(line.rstrip().decode('utf-8')) This works in Python2. (Both give the same output.) But when I execute this in Python3, then the first loop is stuck in a loop where it continually prints a empty string. The second loop is executed correctly in Python3. In the current case it is not a problem for me, but when the output becomes big, the second solution will need more memory. How can I get the first version working in Python3? -- Cecil Westerhof Senior Software Engineer LinkedIn: http://www.linkedin.com/in/cecilwesterhof