在python中构造curl命令以放入python监视脚本

时间:2013-10-21 17:57:16

标签: python urllib2 urllib pycurl

我可以从命令行向我的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"}
        }
    }
}
'

提前感谢您提供的任何帮助。

1 个答案:

答案 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()

这将返回object,它可以为您提供响应代码和消息,标题和正文。有关详细信息,请参阅examples