0

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

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

4

1 回答 1

2

如果您可以将参数列表生成为字符串,则可以轻松使用 subprocess 模块。例如:

def curl_delete(url):
    cmd = ['curl', '-XDELETE', url]
    subprocess.check_call(cmd)

如果你想使用 retcode 作为一个值,而不是仅仅提高非零:

    return subprocess.call(cmd)

或者,如果您想将标准输出作为值或其他任何内容...请参阅有关替换 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()

这将返回一个对象,该对象可以为您提供响应代码和消息、标头和正文。有关更多详细信息,请参阅示例

于 2013-10-21T18:05:03.480 回答