Re: commands.getstatusoutput result is not command line exit value!!!

Discussion in 'Python' started by Hari Sekhon, Oct 2, 2006.

  1. Hari Sekhon

    Hari Sekhon Guest

    I'm sorry, this may seem dense to you but I have to ask. What on earth
    are you talking about?

    Why is it shifted 8 bits to the left? Why is there bitshifting at all?
    Why doesn't commands give the same exit value as os.system() and the
    unix cli?

    When you choose to exit a program you give it a return value to exit
    with, so why would this change, I exit with the number 1 then expect
    that number to be the exit code, right? Where do these higher numbers
    come into the equation and why?

    Please assume that I am not a mind reader and require explanation before
    I can understand.

    Perhaps you aren't a mind reader either and don't know why the writers
    of the commands lib chose to do this insanity either? It seems the
    os.system() guys did the right thing, I wonder why
    commands.getstatusoutput doesn't...

    Having just tested it manually with a shell script returning 2,
    commands.getstatusoutput did give the exit code as 512, so it does seem
    to generically shift the exit code 8 bits to the left or multiply it by
    256 for those of us who need some more straight talking...

    ugg, perhaps it's time to stop using this thing and use a better lib module.

    any explanations welcome...

    -h

    Hari Sekhon



    Steve Holden wrote:
    > A famous Holden typo - it should have been "12 * 256 == 3072", but
    > really it shouldn't have been beyond you to perform a division of 3072
    > by 12 (given that you already knew the number 12 was potentially
    > involved).
    >
    > Basically the value you want is shifted up 8 bits. Perhaps I should
    > more understandably have said:
    >
    > 12 << 8 == 3072
    >
    > regards
    > Steve
    >
    > Hari Sekhon wrote:
    >> I don't quite understand what you are saying here:
    >>
    >> 2 * 256 is 512,
    >> 2 ** 256 is some extremely large number.
    >>
    >> 2**12 is 4096.
    >>
    >> So how does 3072 factor into this?
    >>
    >> Could you explain what you mean by "the error in the top half of a
    >> sixteen-bit value"?
    >>
    >> This makes no sense to me at this moment.
    >>
    >> -h
    >>
    >> Hari Sekhon
    >>
    >>
    >>
    >> Steve Holden wrote:
    >>
    >>> Hari Sekhon wrote:
    >>>
    >>>
    >>>> I'm running a command like
    >>>>
    >>>> import commands
    >>>> result = commands.getstatusoutput('somecommand')
    >>>> print result[0]
    >>>> 3072
    >>>>
    >>>>
    >>>> However, this exit code made no sense so I ran it manually from the
    >>>> command line in bash on my linux server and it gives the exit code
    >>>> as 12, not this weird 3072 number.
    >>>>
    >>>> So I tried os.system('somecommand') in the interactive python shell
    >>>> and it too returned the same result for the exit code as the unix
    >>>> shell, 12, but re-running the commands.getstatusoutput() with the
    >>>> exact same command still gave 3072.
    >>>>
    >>>>
    >>>> Is commands.getstatusoutput() broken or something?
    >>>>
    >>>>
    >>>> -h
    >>>>
    >>>>
    >>> No, it's just returning the error code in the top half of a
    >>> sixteen-bit value. You will notice that 3072 == 2 * 256.
    >>>
    >>> That's always been the way the Unix return code has been returned
    >>> programattically, but the shell shifts it down to make it more usab;e.
    >>>
    >>> regards
    >>> Steve
    >>>
    >>>

    >
    >
    Hari Sekhon, Oct 2, 2006
    #1
    1. Advertising

  2. Hari Sekhon schrieb:
    > I'm sorry, this may seem dense to you but I have to ask. What on earth
    > are you talking about?


    You may not be dense, but you are certainly fairly aggressive in your
    postings. If you just want to complain, go ahead. If you want actual
    help, you should reconsider your tone.

    > Why is it shifted 8 bits to the left?


    As Steve says, that what the system returns (from popen(3)), in this
    case. It's the true exit status, not just the exit code.

    > Why is there bitshifting at all?


    Read some Unix book.

    > Why doesn't commands give the same exit value as os.system() and the
    > unix cli?


    Read some Unix book.

    > When you choose to exit a program you give it a return value to exit
    > with, so why would this change, I exit with the number 1 then expect
    > that number to be the exit code, right?


    Read some Unix book. Hint: how do you know whether the program was
    killed, and didn't actually invoke exit(3)?

    > Where do these higher numbers
    > come into the equation and why?


    Read some Unix book. Hint: Read about WIFEXITED, WIFSIGNALED, and
    WEXITSTATUS.

    > Please assume that I am not a mind reader and require explanation before
    > I can understand.


    You are apparently not a documentation reader, as well. Nobody owes you
    an explanation.

    Regards,
    Martin
    =?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=, Oct 2, 2006
    #2
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. David Carroll
    Replies:
    2
    Views:
    614
    Peter Otten
    Sep 13, 2003
  2. n.o.
    Replies:
    0
    Views:
    328
  3. Replies:
    2
    Views:
    298
  4. Hari Sekhon
    Replies:
    0
    Views:
    311
    Hari Sekhon
    Oct 2, 2006
  5. Fredrik Lundh
    Replies:
    0
    Views:
    412
    Fredrik Lundh
    Oct 2, 2006
Loading...

Share This Page