Возвращаемое значение x = os.system(..)

Когда я набираю os.system("whoami") в Python, как root, он возвращает root, но когда я пытаюсь назначить его переменной x = os.system("whoami"), он устанавливает значение x в 0. Почему? (:

Ответ 1

os.system() возвращает (закодированное) значение завершения процесса. 0 означает успех:

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

Вывод, который вы видите, записывается в stdout, поэтому ваша консоль или терминал, а не возвращается вызывающей стороне Python.

Если вы хотите захватить stdout, используйте вместо этого subprocess.check_output() :

x = subprocess.check_output(['whoami'])

Ответ 2

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

Обратитесь к моему ответу для более подробной информации в Что такое возвращаемое значение os.system() в Python?