Согласно документации Python os * os.popen устарела с Python 2.6.
Я думаю, что решением для современного Python является использование check_output () из модуля подпроцесса.
Из документации по Python для подпроцесса :
subprocess.check_output (args, *, stdin = Нет, stderr = Нет, shell = False, universal_newlines = False)
Запустите команду с аргументами и верните ее вывод в виде байтовой строки.
Если код возврата отличен от нуля, возникает ошибка CalledProcessError. У объекта CalledProcessError будет код возврата в атрибуте returncode и любые выходные данные в атрибуте output.
Если вы выполните следующий код в Python 2.7 (или более поздней версии):
import subprocess
try:
print subprocess.check_output(["ping", "-n", "2", "-w", "2", "1.1.1.1"])
except subprocess.CalledProcessError, e:
print "Ping stdout output:\n", e.output
Вы должны увидеть результат, который выглядит примерно так:
Ping stdout output:
Pinging 1.1.1.1 with 32 bytes of data:
Request timed out.
Request timed out.
Ping statistics for 1.1.1.1:
Packets: Sent = 2, Received = 0, Lost = 2 (100% loss),
Строка e.output может быть проанализирована в соответствии с потребностями OP.
Если вам нужен код возврата или другие атрибуты, они находятся в CalledProccessError, что можно увидеть, пройдя по команде pdb
(Pdb)!dir(e)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__',
'__getattribute__', '__getitem__', '__getslice__', '__hash__', '__init__',
'__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
'__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__',
'__unicode__', '__weakref__', 'args', 'cmd', 'message', 'output', 'returncode']