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

Reply via email to