Как сохранить результат выполнения команды оболочки в переменной в 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}'")) 

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

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

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

  • Импорт Orange возвращает «ImportError: no module named orange»
  • Маринованный файл не загружается на Mac / Linux
  • Как создать пользователя в Linux с помощью python
  • Потребление памяти Python в Linux: физическая и виртуальная память растут, а размер кучи остается неизменным
  • как проверить, какая версия nltk, scikit learn установлена?
  • Кросс-платформенное пространство, оставшееся на томе с использованием python
  • sys.stdin не закрывается на ctrl-d
  • Ошибка при установке Python
  •  
    Interesting Posts for Van-Lav

    Использование драйверов FTDI D2XX с Python из Raspberry Pi на платформе raspbian soft-float

    Удалить строку Pandas DataFrame, где значение столбца <0

    python, чтобы получить имя файла и открыть в другом скрипте

    Методы представления классов Python

    Почему динамическое добавление метода `__call__` к экземпляру не работает?

    Двоичное представление float в Python (бит не hex)

    регулярные выражения python возвращают true / false

    Захват нажатий клавиш для игры (python)

    почему cv2.imshow () приводит к ошибке в моем компиляторе python?

    Как сделать Python3 Python по умолчанию в Geany

    Кажется, у меня закончилось 32-разрядное адресное пространство. Какие у меня варианты?

    Дерево элементов Python – извлечение текста из элемента, удаление дескрипторов

    Устойчивая, фактически работающая реализация CSV для non-ascii?

    django 1.8: В XView отсутствует QuerySet. Определите XView.model, XView.queryset,

    Каков наилучший способ создания регенераторов генераторов в виде сопрограмм?

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