Как сохранить результат выполнения команды оболочки в переменной в python?

Мне нужно сохранить результат команды оболочки, которую я выполнил в переменной. Но я не мог этого понять. Я пробовал:

call=os.system("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'") print call 

Но он печатает результат в терминале и печатает значение вызова как ноль, возможно, указывая на успех. Как получить результат, хранящийся в переменной?

3 Solutions collect form web for “Как сохранить результат выполнения команды оболочки в переменной в python?”

Вместо этого используйте модуль subprocess :

 import subprocess output = subprocess.check_output("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'", shell=True) 

Изменить: это новое в Python 2.7. В более ранних версиях это должно работать (с командой, переписанной, как показано ниже):

 import subprocess output = subprocess.Popen(['awk', '/f89e7000/ {print $2}', 'syscall_list.txt'], stdout=subprocess.PIPE).communicate()[0] 

В качестве примечания вы можете переписать

 cat syscall_list.txt | grep f89e7000 

к

 grep f89e7000 syscall_list.txt 

И вы даже можете заменить весь оператор одним awk скриптом:

 awk '/f89e7000/ {print $2}' syscall_list.txt 

Руководители:

 import subprocess output = subprocess.check_output(['awk', '/f89e7000/ {print $2}', 'syscall_list.txt']) 

commands.getstatusoutput будет хорошо работать для этой ситуации.

 import commands print(commands.getstatusoutput("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'")) 

Все остальные ответы здесь являются точными ответами. Во многих ситуациях вам нужно запускать внешние команды.

Этот конкретный пример имеет еще один вариант: вы можете прочитать файл, обработать его по строкам и сделать что-то с выходом.

Хотя этот ответ не работает для «более общего вопроса, задаваемого», я думаю, что его всегда следует учитывать. Это не всегда «правильный ответ», даже там, где это возможно. Помня об этом (проще), и зная, когда (а не) применить его (сложнее), сделает вас лучшим программистом.

  • Получить выделенный текстовый контент из других программ
  • Что означает «следующие пакеты будут заменены каналом с более высоким приоритетом»?
  • Извлечение данных из таблицы HTML
  • Демонтаж сельдерея
  • Python - whoops - установлен Python2.6, когда у меня есть 2.7 - по умолчанию теперь 2.6 - хочу 2.7 назад
  • Потерял важный .py-файл (перезаписан в виде 0-байтного файла), но старая версия все еще загружена в IPYTHON в качестве модуля - может ли она быть восстановлена?
  • Как установить PyGObject с поддержкой Python 3
  • Почему эти apt-пакеты не ведут себя одинаково на Ubuntu и Heroku?
  • Python: кросс-платформенное решение для обнаружения физических не-HT-процессоров?
  • Установить tkinter для Python
  • Захват вывода скрипта python выполняется внутри контейнера докеров
  •  
    Interesting Posts for Van-Lav

    Почему f2py не включает все аргументы?

    pyqt4 уже имеет макет. Как «обнаружить» его или изменить?

    Как удалить левую часть строки?

    Передача и получение массивов через Sockets

    Могу ли я гнездо TestCases с носом?

    Что в мире есть атрибут «__class__» в python

    Сделать переход на Python 3 – Лучшие практики

    Можно ли использовать Python для написания кросс-платформенных приложений для iOS и Android?

    Ошибка импорта для модуля BPY в python

    Как преобразовать столбец со списком значений в строки в Pandas DataFrame

    Как насмехаться с клиентом redis в Python?

    TransactionManagementError «Вы не можете выполнять запросы до конца« атомного »блока при использовании сигналов, но только во время модульного тестирования

    Предварительная обработка плохо отсканированных рукописных цифр

    Инструмент, помогающий устранить импорт подстановочных знаков

    Получить определяющий класс объекта несвязанного метода в Python 3

    Python - лучший язык программирования в мире.