根据
Python os模块文档,自Python 2.6起os.popen已被弃用。
我认为现代Python的解决方案是使用subprocess模块中的check_output()。
来自
subprocess Python文档:
“subprocess.check_output(args, *, stdin=None, stderr=None, 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的需求。
如果您想要returncode或其他属性,它们在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']
.split(' ')
,并将生成的列表作为输入传递给check_output()
。 - krysopath