使用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]