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

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


person Ramon    schedule 23.09.2014    source источник


Ответы (2)


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

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

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

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

x = subprocess.check_output(['whoami'])
person Martijn Pieters    schedule 23.09.2014
comment
Я пробовал несколько способов использования подпроцесса, но всегда получаю [Errno 9] Bad file descriptor... что не так? .-. - person Fabio Magarelli; 21.10.2019
comment
@FabioMagarelli, это невозможно сказать без минимально воспроизводимого примера. Это, вероятно, не то, с чем я могу помочь в комментариях, рассмотрите возможность публикации вопроса, если у вас есть хороший воспроизводимый случай. - person Martijn Pieters; 21.10.2019

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

Подробнее см. мой ответ в Что является возвращаемым значением os.system() в Python?

person AlokThakur    schedule 12.02.2016