David Riley <fraveyd...@gmail.com> wrote: > On Oct 23, 2011, at 10:44 PM, aaabb...@hotmail.com wrote: > > > exp: > > os.system('ls -al') > > #I like to catch return value after this command. 0 or 1,2,3.... > > does python support to get "$?"? > > then I can use something like: > > If $?==0: > > ........ > > ................ > > From the manual (http://docs.python.org/library/os.html#os.system): > > "On Unix, the return value is the exit status of the process encoded in the > format specified for wait(). Note that POSIX does not specify the meaning of > the return value of the C system() function, so the return value of the > Python function is system-dependent." > > From the linked wait() documentation, the data returned is in a 16-bit > integer, with the high byte indicating the exit status (the low byte is the > signal that killed the process). So: > > > > > status = os.system("foo") > > retval, sig = ((status >> 8) & 0xFF), (status & 0xFF) >
... or retval, sig = os.WEXITSTATUS(status), os.WTERMSIG(status) for some insulation from low-level details. Nick > > > > In the above example, your return status will end up in "retval". > > Of course, you probably ought to be using subprocess to run your subprocesses > anyway; it's a lot more powerful and a lot harder to enable things like shell > injection attacks. See: > http://docs.python.org/library/subprocess.html#subprocess-replacements > (which, of course, shows a direct replacement for os.system which is just as > vulnerable to shell injection) > > > - Dave > > -- > http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list