subprocess returncode is masked

Yinon Ehrlich yinon.me at gmail.com
Thu Dec 31 00:45:25 EST 2009


On Dec 30, 7:59 pm, Nobody <nob... at nowhere.com> wrote:
> On Mon, 28 Dec 2009 17:12:23 +0100, Emmanuel wrote:
> > I'm using Python 2.6 and the new subprocess module to get the exit value
> > of an external executable. It appears the return value given by wait()
> > or poll() operations is masked under Unix: I only get the lower 8 bits.
> > So an exit value of 0x0402 in the C program will be seen as 0x02 in
> > Python. And this does not happen on Windows...
> > Any idea why that is ?
>
> That's how Unix works.
>
> The exit status of a process as reported by wait() (etc) is a 16-bit
> value (the first Unix systems had a 16-bit "int"). The top 8 bits (8-15)
> contain the exit code passed to exit() or "return"ed from main(),
> truncated to 8 bits. The bottom 7 bits (0-6) contain the signal number if
> the process was terminated by a signal. Bit 7 is set if the process dumped
> core.

See also: http://docs.python.org/library/os.html#os.wait



More information about the Python-list mailing list