2012-06-07 45 views
5

Estoy trabajando en Linux con un código que realiza una llamada system() para ejecutar un programa python. Estoy interesado en el valor devuelto por esta llamada de función para comprender cómo fue la ejecución del programa python.Valor devuelto de la llamada a la función system() en C++, utilizada para ejecutar un programa Python

Hasta ahora, he encontrado 3 resultados:

  • Cuando el proceso de pitón se completa con éxito, el valor devuelto por el sistema() es 0

  • Cuando el proceso de pitón se mató a mediados de ejecución (usando kill -9 pid), valor devuelto por el sistema() es 9

  • Cuando el proceso de pitón falla en su propia debido a parámetros incorrectos, valor devuelto por el sistema() es 512

Esto no concuerda con lo que he leído sobre la función system().

Además, el código para el programa python que se invoca muestra que sale con sys.exit(2) cuando se encuentra un error, y sys.exit(0) cuando la ejecución se completa con éxito.

¿Alguien podría relacionar estos dos? ¿Estoy interpretando el valor de retorno de una manera incorrecta? ¿Hay algún proceso de Linux involucrado que tome el argumento de la función sys.exit() del programa python y devuelva el valor de system() basado en él?

+1

¿Cómo está invocando el programa python? es decir, con 'system ("/usr/bin/env python/path/to/script ");'? – mkb

+0

'system (" python progname.py arg1 arg2 arg2 ");' Python ya se ha agregado a PATH –

Respuesta

9

El código de salida del programa al que llama puede buscarse en WEXITSTATUS(status) según el manual page. Consulte también la página del manual para wait.

int status = system("/path/to/my/program"); 
if (status < 0) 
    std::cout << "Error: " << strerror(errno) << '\n'; 
else 
{ 
    if (WIFEXITED(status)) 
     std::cout << "Program returned normally, exit code " << WEXITSTATUS(status) << '\n'; 
    else 
     std::cout << "Program exited abnormaly\n"; 
} 
+0

¿Cómo hacerlo en Windows 7? ¿Cuál es el archivo de encabezado en el que está definido WIFEXITED? – CroCo

+0

@CroCo Windows no tiene lo mismo cuando se trata de códigos de salida, es una cosa [POSIX] (http://en.wikipedia.org/wiki/POSIX). –

Cuestiones relacionadas