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

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

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

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

Вместо этого используйте модуль 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}'")) 

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

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

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