我可以从命令行向我的elasticsearch引擎的实例发出CURL命令,如下所示。但是如何在python监视脚本中发出这些命令呢?我只能使用默认的python 2.7内置std python包。
我想在python脚本中运行的命令示例:
删除索引:
$ curl -XDELETE 'http://localhost:9200/twitter/'
检查索引是否存在:
$ curl -XHEAD 'http://localhost:9200/twitter'
$ curl -XPUT 'http://localhost:9200/twitter/tweet/_mapping' -d '
{
"tweet" : {
"properties" : {
"message" : {"type" : "string", "store" : "yes"}
}
}
}
'
提前感谢您提供的任何帮助。
答案 0 :(得分:1)
如果可以生成参数列表作为字符串,则可以轻松使用子进程模块。例如:
def curl_delete(url):
cmd = ['curl', '-XDELETE', url]
subprocess.check_call(cmd)
如果您想将retcode用作值而不是仅仅使用非零值:
return subprocess.call(cmd)
或者,如果您想将stdout作为值或其他任何内容...请参阅有关替换shell命令的子流程文档部分。通常你想要的是:
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
out, _ = p.communicate()
return out
但是,值得注意的是urllib2模块可以完成示例中的所有操作(尽管对于其中一些模块会很痛苦),而httplib几乎可以完成curl所能做的任何事情。例如:
def http_delete(url):
bits = urlparse.urlparse(bits)
conn = httplib.HTTPConnection(bits.host, bits.port)
req = conn.request('delete', url)
return req.getresponse()