2012-06-07 17 views
5

Pracuję na systemie Linux z kodem, który wykonuje wywołanie system() w celu uruchomienia programu python. Interesuje mnie wartość zwrócona przez to wywołanie funkcji, aby zrozumieć, w jaki sposób poszło wykonywanie programu Pythona.Zwraca wartość wywołania funkcji system() w C++, używanego do uruchamiania programu w języku Python

tej pory znalazłem 3 wyniki:

  • Gdy proces python zakończy się pomyślnie, wartość zwracana przez system() jest 0

  • Gdy proces python ginie w połowie realizacji (stosując kill -9 pid) wartość zwrócona przez układ (9) jest

  • Gdy proces pyton nie na skutek braku nieprawidłowych parametrów, wartość zwracana przez układ (512)

To nie pasuje do tego, co przeczytałem na temat funkcji system().

Ponadto kod wywoływanego programu Pythona wskazuje, że kończy się on z sys.exit(2) po napotkaniu dowolnego błędu i sys.exit(0) po pomyślnym zakończeniu wykonywania.

Czy ktoś może odnosić się do tych dwóch? Czy interpretuję wartość zwrotu w niewłaściwy sposób? Czy jest jakieś przetwarzanie Linuxa, które bierze argument funkcji sys.exit() programu Pythona i na tej podstawie zwraca wartość system()?

+1

Jak się uruchamia program python? tj. z 'system ("/usr/bin/env python/path/to/script ");'? – mkb

+0

'system (" python progname.py arg1 arg2 arg2 ");' Python został już dodany do PATH –

Odpowiedz

9

Kod wyjścia programu, który wywołujesz, można pobrać za pomocą WEXITSTATUS(status) zgodnie z manual page. Zobacz także stronę podręcznika dla 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

Jak to zrobić w Windows 7? Co to jest plik nagłówkowy, w którym zdefiniowano WIFEXITED? – CroCo

+0

@CroCo Windows nie ma tego samego, jeśli chodzi o kod wyjścia, to rzecz [POSIX] (http://en.wikipedia.org/wiki/POSIX). –

Powiązane problemy