使用python提取输出
如何从输出中提取所需数据并将其保存到变量 这是我的节目:使用python提取输出,python,Python,如何从输出中提取所需数据并将其保存到变量 这是我的节目: import commands cmd = curl -v -k -H "Content-Type: application/json" -X GET -u hitman:hitman <https://test.com:8181/v1/config/sipregistrar result = commands.getoutput(cmd) print result About to connect() to test.com
import commands
cmd = curl -v -k -H "Content-Type: application/json" -X GET -u hitman:hitman <https://test.com:8181/v1/config/sipregistrar
result = commands.getoutput(cmd)
print result
About to connect() to test.com port 8181 (#0)
Trying test.com... % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0connected
Connected to 50.50.50.201 (50.50.50.201) port 8181 (#0)
successfully set certificate verify locations:
HTTP/1.1 200 OK
Date: Tue, 05 Jun 2012 18:27:11 GMT
Server: Jetty(6.1.22)
Content-Type: application/json;charset=UTF-8
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: JSESSIONID=12buplms5odzt;Path=/config
Transfer-Encoding: chunked
Closing connection #0
SSLv3, TLS alert, Client hello (1):
} [data not shown]
{"sip_domains":{"prefix":[{"name":""}],"domain":[{"name":"k200.com"},{"name":"zinga.com"},{"name":"rambo.com"}]},"sip_security":{"level":2},"sip_trusted_hosts":{"host":[]},"sip_proxy_mode":{"handle_requests":1}}
从该输出中,我需要的参数为:
{“sip_域”:{“前缀”:[{“名称”:“}],“域”:[{“名称”:“k200.com”},{“名称”:“zinga.com”},{“名称”:“rambo.com”}],“sip_安全”:{“级别”:2},“sip_受信任的_主机”:{“主机”:[]},“sip_代理_模式”:{“处理请求”:1}
如何提取上述参数并将其保存到变量?如果您只需要这些参数的字符串,并且所有输出都遵循该模式,并且[data not Showed]中没有任何内容会破坏此模式,您可以尝试
params = results[results.find('{"'):]
它获取从{“sip_域”开始的结果部分
但是,如果您手头上还有另一个{“文件,则此文件将被破坏。我已经清理了此文件,删除了
eval
,并使用JSON转换了结果,以确保其安全:
import json
from pprint import pprint
output = '''[data extract]Set-Cookie: JSESSIONID=12buplms5odzt;Path=/config
Transfer-Encoding: chunked
Closing connection #0
SSLv3, TLS alert, Client hello (1):
} [data not shown]
{"sip_domains":{"prefix":[{"name":""}],"domain":[{"name":"k200.com"},{"name":"zinga.com"},{"name":"rambo.com"}]},"sip_security":{"level":2},"sip_trusted_hosts":{"host":[]},"sip_proxy_mode":{"handle_requests":1}}'''
output = json.loads( output.split("\n")[-1] )
pprint( output )
变量output
现在包含以下字典:
{'sip_domains': {'domain': [{'name': 'k200.com'},
{'name': 'zinga.com'},
{'name': 'rambo.com'}],
'prefix': [{'name': ''}]},
'sip_proxy_mode': {'handle_requests': 1},
'sip_security': {'level': 2},
'sip_trusted_hosts': {'host': []}}
这只是一个简单的替代方案,@jcfollower从我这里得到了一个+1,这是一个简洁有效的解决方案。请阅读并编辑您的问题。它是这样不可读的。+1欢迎使用StackOverflow,anywayoutput=eval(result.split(“\n”)[-1])打印输出json_dict=json。加载(输出)打印json_dict中的域_dict的json_dict['sip_-domains']['domain']:print'域:%s'('domain_-dict['name']){'sip_-domains':{'prefix':[{'name':'k200.com'},{'name':'cucm.com'},'sip_-proxy_-mode':{'handle_请求:1},'sip_-security':{'level level 2},'u-trusted_-hosts':{'hosts':{'host':[]}追踪(最近调用的testback 25.py文件)“,第34行,在json_dict=json.loads(output)文件“/usr/lib/python2.7/json/”u_init___.py”中,第326行,在loadsreturn\u default_decoder.decode(s)文件“/usr/lib/python2.7/json/decoder.py”中,第360行,在decode obj中,end=self.raw_decode(s,idx=_w(s,0.end())TypeError:预期字符串或缓冲区会收到此错误…???抱歉,我已离开网络一段时间。您不应该将其作为JSON字符串加载。只需
打印输出就足够了。无论如何,对于任一版本,请注意,如果您不信任数据来自何处,eval()
将是一个安全漏洞,所以我这样做只是为了好玩…如果您想使用JSON,那么请执行output=output.split(“\n”)[-1]