Jaka jest wartość zwracana systemu operacyjnego.system() w Pythonie?
Natknąłem się na to:
>>> import os
>>> os.system('ls')
file.txt README
0
Co to jest wartość zwracanaos.system()
? Dlaczego mam 0?
4 answers
Wartość zwracana os.system
jest zależny od systemu operacyjnego.
W systemie Unix wartość zwracana jest liczbą 16-bitową, która zawiera dwie różne informacje. Z dokumentacji:
16-bitowa liczba, której niski bajt to numer sygnału, który zabił proces, a wysoki bajt to status zakończenia (jeśli numer sygnału jest równy zeru)
Więc jeśli liczba sygnału (niski bajt) wynosi 0, teoretycznie bezpiecznie byłoby przesunąć wynik o 8 bitów (result >> 8
), Aby uzyskać kod błędu. Funkcja os.WEXITSTATUS
robi dokładnie to. Jeśli kod błędu wynosi 0, zwykle oznacza to, że proces zakończył się bez błędów.
W systemie Windows dokumentacja określa, że zwracana wartość os.system
jest zależna od powłoki. Jeśli powłoką jest cmd.exe
(domyślna), wartość jest kodem zwracanym przez proces. Ponownie, 0 oznaczałoby, że nie było błędów.
Dla innych kodów błędów:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-10 17:38:54
os.system('command')
zwraca 16 bitową liczbę, która pierwsze 8 bitów od lewej (lsb) mówi o sygnale używanym przez system operacyjny do zamknięcia polecenia, następne 8 bitów mówi o kodzie zwrotnym polecenia.
00000000 00000000
exit code signal num
Przykład 1-polecenie exit z kodem 1
os.system('command') #it returns 256
256 in 16 bits - 00000001 00000000
Exit code is 00000001 which means 1
Przykład 2-polecenie exit z kodem 3
os.system('command') # it returns 768
768 in 16 bits - 00000011 00000000
Exit code is 00000011 which means 3
Teraz spróbuj z sygnałem - Przykład 3-Napisz program, który długo śpi, używa go jako polecenia w systemie operacyjnym.system () i następnie zabić go przez kill -15 lub kill -9
os.system('command') #it returns signal num by which it is killed
15 in bits - 00000000 00001111
Signal num is 00001111 which means 15
Możesz mieć program w Pythonie as command = 'python command.py"
import sys
sys.exit(n) # here n would be exit code
W przypadku programu c lub C++ można użyć return from main () lub exit (n) z dowolnej funkcji #
Uwaga-dotyczy to Uniksa
W systemie Unix wartością zwracaną jest status zakończenia procesu zakodowanego w format określony dla wait (). Należy pamiętać, że POSIX nie określa znaczenie wartości zwracanej przez funkcję C system (), więc zwrot wartość funkcji Pythona jest zależna od systemu.
Os.wait ()
Poczekaj na zakończenie procesu potomnego i zwróć krotkę zawierającą jego oznaczenie PID i status zakończenia: 16-bitową liczbę, której niski bajt to numer sygnału, który zabił proces, a którego wysoki bajt jest stanem wyjścia (jeśli numer sygnału jest zerowy); wysoki bit niski bajt jest ustawiany, jeśli powstał plik core.
Availability: Unix
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-24 05:50:23
" w systemie Unix zwracaną wartością jest wyjście status procesu zakodowanego w format określony dla wait (). Zauważ, że POSIX nie określa znaczenia wartość zwracana systemu C() funkcji, więc wartość zwracana przez Funkcja Pythona jest zależna od systemu."
Http://docs.python.org/library/os.html#os.system
Nie ma błędu, więc kod wyjścia to zero
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-24 10:49:10
Os.system() zwraca jakieś wyjście uniksowe, a nie polecenie. Tak więc, jeśli nie ma błędu, to kod wyjścia zapisany jako 0.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-24 10:52:44