Assign output of os.system to a variable and prevent it from being displayed on the screen [duplicate]
Присвоить выходные данные os.system переменной и запретить их отображение на экране
Я хочу присвоить выходные данные команды, которую я запускаю с помощью os.system, переменной и запретить их вывод на экран. Но в приведенном ниже коде выходные данные отправляются на экран, а значение, напечатанное для var равно 0, что, я полагаю, означает, успешно ли выполнена команда или нет. Есть ли какой-нибудь способ присвоить выходные данные команды переменной, а также запретить их отображение на экране?
var = os.system("cat /etc/services") print var #Prints 0
Переведено автоматически
Ответ 1
Из этого вопроса, который я задавал давным-давно, вы можете захотеть использовать popen:
Это реализовано с помощью subprocess .Popen ; смотрите Документацию этого класса, чтобы узнать о более мощных способах управления подпроцессами и взаимодействия с ними.
Преимущество этого заключается в том, что существует тонна гибкости в том, как вы вызываете команды, где подключены стандартные потоки ввода / вывода / ошибок и т.д.
Ответ 3
Модуль commands - это достаточно высокоуровневый способ сделать это:
состояние равно 0, выходные данные представляют собой содержимое /etc/services .
Ответ 4
Для python 3.5+ рекомендуется использовать функцию run из модуля subprocess. Это возвращает CompletedProcess объект, из которого вы можете легко получить выходные данные, а также код возврата. Поскольку вас интересуют только выходные данные, вы можете написать утилиту-оболочку, подобную этой.
from subprocess import PIPE, run
defout(command): result = run(command, stdout=PIPE, stderr=PIPE, universal_newlines=True, shell=True) return result.stdout