subprocess returncode is masked

E

Emmanuel

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 ?
Emmanuel
 
W

webtourist

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 ?
Emmanuel
 
M

MRAB

Emmanuel said:
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 ?
I believe that in Unix the exit code is indeed limited to 8 bits.
 
S

Steve Holden

Emmanuel said:
MRAB wrote :
Looks like you're right but the info is difficult to find since it is
implementation dependent. I finally found it on
http://en.wikipedia.org/wiki/Exit_status. This is very confusing because
the parameter type of the exit function is an int ?!

Yes, but the parameter type is a superset of the function's domain.
That's not so unusual - consider math.sqrt(), for example. Its parameter
type is float, but what happens when you call math.float(-3.5)?

regards
Steve
 
S

Steve Holden

Emmanuel said:
MRAB wrote :
Looks like you're right but the info is difficult to find since it is
implementation dependent. I finally found it on
http://en.wikipedia.org/wiki/Exit_status. This is very confusing because
the parameter type of the exit function is an int ?!

Yes, but the parameter type is a superset of the function's domain.
That's not so unusual - consider math.sqrt(), for example. Its parameter
type is float, but what happens when you call math.float(-3.5)?

regards
Steve
 
N

Nobody

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.
 
Y

Yinon Ehrlich

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,043
Latest member
CannalabsCBDReview

Latest Threads

Top