ivank added the comment:

This problem happens with Python 3.4 as well.

$ cat read_error_file.py 
from __future__ import print_function

import os

fname = "/usr/bin/Xorg"
size = os.stat(fname).st_size
print(fname, "stat size:", size)

f = open(fname, "rb")
print("len(f.read()): ", len(f.read()))
f.close()

f = open(fname, "rb")
for i in range(size):
        try:
                f.read(1)
        except IOError:
                print("IOError at byte %d" % i)
                break
f.close()

$ python3 --version
Python 3.4.1

$ python3 read_error_file.py
/usr/bin/Xorg stat size: 2331776
len(f.read()):  716800
IOError at byte 716800

strace for the first test is:

open("/usr/bin/Xorg", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=2331776, ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, 
0x7fff323ac8b0) = -1 ENOTTY (Inappropriate ioctl for device)
fstat(3, {st_mode=S_IFREG|0755, st_size=2331776, ...}) = 0
lseek(3, 0, SEEK_CUR)                   = 0
lseek(3, 0, SEEK_CUR)                   = 0
fstat(3, {st_mode=S_IFREG|0755, st_size=2331776, ...}) = 0
mmap(NULL, 2334720, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x7f57884cc000
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\265M\4\0\0\0\0\0"..., 
2331777) = 716800
read(3, 0x7f578857b030, 1614977)        = -1 EIO (Input/output error)
mremap(0x7f57884cc000, 2334720, 720896, MREMAP_MAYMOVE) = 0x7f57884cc000
munmap(0x7f57884cc000, 720896)          = 0
write(1, "len(f.read()):  716800\n", 23len(f.read()):  716800
) = 23
close(3)

----------
versions: +Python 3.4

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue21090>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to