On 7/29/2016 4:43 AM, Antoon Pardon wrote:
Below is a short program that illustrate the problem
It works with python2, whether you use the -c option or not.
It only works with python3 if you use the -c option.
The problem seems to come from my expectation that a file
is its own iterator and in python3 that is no longer true
for a NamedTemporaryFile.
As Eryk Sun said, a _TemporaryFileWrapper is an iterable, but not an
iterator.
Should this be considered a bug?
No. The doc for NamedTemporaryFile does not even claim that the return
is iterable.
=========================================================================
from tempfile import NamedTemporaryFile
import sys
def main(tmp):
write = sys.stdout.write
if tmp:
tstfl = NamedTemporaryFile("w+", prefix = 'tmptest-')
else:
tstfl = open("Temporary", "w+")
for nr in range(10):
tstfl.write("This is line %d\n" % nr)
tstfl.seek(0)
Either add "tstfl_it = iter(tstfl)" and call next on what is now
guaranteed to be an iterator, if one is possible.
try:
while True:
ln = next(tstfl)
write(ln)
except StopIteration:
pass
Or replace the above with the much easier to write and more idiomatic
for line in tstfl:
write(line)
if __name__ == "__main__":
tmp = True
if len(sys.argv) > 1:
# if -c option is passed a normal file will be
# used instead of a NamedTemporaryFile
if sys.argv[1] == '-c':
tmp = False
main(tmp)
--
Terry Jan Reedy
--
https://mail.python.org/mailman/listinfo/python-list