Atanas Banov wrote: > i ran onto this weirdness today: seems like close() on popen-ed > (pseudo)file fails miserably with exception instead of returning exit > code, when said exit code is -1. > > here is the simplest example (under Windows): > > >>>>print popen('exit 1').close() > > 1 > >>>>print popen('exit -1').close() > > Traceback (most recent call last): > File "<interactive input>", line 1, in ? > IOError: (0, 'Error') > >>>>print popen('exit -2').close() > > -2 > > has anyone have idea why is that?
_PyPclose returns the exit status of the popened process (the popenee?), or -1 on error. Of course, if the status is supposed to be -1, there's some confusion. In the snippet of code below (from Modules/posixmodule.c), result has been initialized to the output of fclose, which in your case is 0. The comment is particularly handy. if (result != EOF && waitpid(pipe_pid, &exit_code, 0) == pipe_pid) { /* extract exit status */ if (WIFEXITED(exit_code)) { result = WEXITSTATUS(exit_code); } else { errno = EPIPE; result = -1; } } else { /* Indicate failure - this will cause the file object * to raise an I/O error and translate the last * error code from errno. We do have a problem with * last errors that overlap the normal errno table, * but that's a consistent problem with the file object. */ result = -1; } -- http://mail.python.org/mailman/listinfo/python-list