logging.FileHandler diff Py2 v Py3
Peter Otten
__peter__ at web.de
Tue Apr 3 14:18:57 EDT 2018
Paul Moore wrote:
> On 3 April 2018 at 17:54, Peter Otten <__peter__ at web.de> wrote:
>> I think the culprit is io.open() rather than the logging module. Why does
>>
>>>>> io.open("/dev/stderr", "a")
>> Traceback (most recent call last):
>> File "<stdin>", line 1, in <module>
>> OSError: [Errno 29] Illegal seek
>>
>> even try to seek()?
>
> Because it's append mode so it needs to go to the end?
I expected that to be handled by the C library, and in C there is no error:
$ cat open_stderr_in_appendmode.c
#include <stdio.h>
main()
{
FILE * stderr = fopen("/dev/stderr", "a");
if (stderr == 0)
{
printf("failed\n");
}
else
{
printf("succeded\n");
fprintf(stderr, "\nthis goes to stderr\n");
fclose(stderr);
}
}
$ gcc open_stderr_in_appendmode.c
$ ./a.out
succeded
this goes to stderr
The same goes for Py2's built-in and codecs.open():
$ python
Python 2.7.6 (default, Nov 23 2017, 15:49:48)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import codecs
>>> import io
>>> with open("/dev/stderr", "a") as f: f.write("works\n")
...
works
>>> with codecs.open("/dev/stderr", "a") as f: f.write("works\n")
...
works
>>> with io.open("/dev/stderr", "a") as f: f.write("works\n")
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 29] Illegal seek
>>>
So io.open() really seems to do its own thing, and differently.
More information about the Python-list
mailing list