Подтвердить что ты не робот

Каково возвращаемое значение os.system() в Python?

Я наткнулся на это:

>>> import os
>>> os.system('ls')
file.txt README
0

Что такое возвращаемое значение os.system()? Почему я получаю 0?

4b9b3361

Ответ 1

Возвращаемое значение os.system зависит от ОС.

В Unix возвращаемое значение представляет собой 16-разрядное число, содержащее две разные части информации. Из документации:

16-разрядное число, младший байт которого является номером сигнала, который убил процесс, и чей старший байт является статусом выхода (если номер сигнала равен нулю)

Итак, если номер сигнала (младший байт) равен 0, теоретически было бы безопасно сдвинуть результат на 8 бит (result >> 8), чтобы получить код ошибки. Функция os.WEXITSTATUS делает именно это. Если код ошибки равен 0, это обычно означает, что процесс вышел без ошибок.

В Windows документация указывает, что возвращаемое значение os.system зависит от оболочки. Если оболочка cmd.exe (по умолчанию), это код возврата процесса. Опять же, 0 будет означать, что ошибок не было.

Для других кодов ошибок:

Ответ 2

os.system('command') возвращает 16-разрядное число, в котором первые 8 бит слева (lsb) говорят о сигнале, используемом os для закрытия команды. Следующие 8 бит говорят о коде кода возврата.

00000000    00000000
exit code   signal num

Пример 1 - выход команды с кодом 1

os.system('command') #it returns 256
256 in 16 bits -  00000001 00000000
Exit code is 00000001 which means 1

Пример 2 - выход команды с кодом 3

os.system('command') # it returns 768
768 in 16 bits  - 00000011 00000000
Exit code is 00000011 which means 3

Теперь попробуйте с сигналом - Пример 3. Запишите программу, которая долгое время долгое время сна использует ее как команду в os.system(), а затем убивает ее с помощью kill -15 или 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

У вас может быть программа python как command = 'python command.py'

import sys
sys.exit(n)  # here n would be exit code

В случае программы c или С++ вы можете использовать return from main() или exit (n) из любой функции #

Примечание. Это применимо к unix

В Unix возвращаемое значение - это статус выхода процесса, закодированного в формат, заданный для wait(). Обратите внимание, что POSIX не указывает значение возвращаемого значения функции C system(), поэтому возврат Значение функции Python зависит от системы.

os.wait()

Дождитесь завершения дочернего процесса и верните кортеж, содержащий его индикацию состояния pid и выхода: 16-разрядное число, чья младший байт - это номер сигнала, который убил процесс, и чей высокий байт - это статус выхода (если номер сигнала равен нулю); высокий бит младшего байта устанавливается, если был создан основной файл.

Availability: Unix

.

Ответ 3

"В Unix возвращаемое значение - это выход статус процесса, закодированного в формат, заданный для wait(). Обратите внимание, что POSIX не указывает значение возвращаемое значение системы C() функции, поэтому возвращаемое значение Функция Python зависит от системы.

http://docs.python.org/library/os.html#os.system

Нет ошибки, поэтому код выхода равен нулю

Ответ 4

os.system() возвращает некоторый выход unix, а не вывод команды. Итак, если нет ошибки, выйдите из кода, написанного как 0.