在python中构造curl命令,将其放入python监视脚本中

在python中构造curl命令,将其放入python监视脚本中,python,urllib2,urllib,pycurl,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

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

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

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

def curl_delete(url):
    cmd = ['curl', '-XDELETE', url]
    subprocess.check_call(cmd)
def http_delete(url):
    bits = urlparse.urlparse(bits)
    conn = httplib.HTTPConnection(bits.host, bits.port)
    req = conn.request('delete', url)
    return req.getresponse()
如果您希望将retcode用作值,而不是仅在非零时提升:

    return subprocess.call(cmd)
或者,如果您想将stdout作为一个值,或者其他任何东西。。。请参阅有关替换shell命令的子流程文档部分。通常你想要的是:

    p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
    out, _ = p.communicate()
    return out
但是,值得注意的是,urllib2模块可以完成示例中的所有操作(尽管对其中一些示例来说这会很痛苦),而httplib可以完成curl所能完成的几乎所有操作。例如:

def curl_delete(url):
    cmd = ['curl', '-XDELETE', url]
    subprocess.check_call(cmd)
def http_delete(url):
    bits = urlparse.urlparse(bits)
    conn = httplib.HTTPConnection(bits.host, bits.port)
    req = conn.request('delete', url)
    return req.getresponse()

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

是否必须使用curl而不是将其重写为urllib2或httplib代码?是的,我的意思是,这是我从命令行执行的方式,但我可以使用一些rest客户端来执行。我只想要一个非常简单的脚本作为另一种选择:有什么理由必须在Python中这样做吗?如果您只想执行命令,而您既不知道也不想学习Python,那么bash、Powershell或其他shell将简单得多。我是否可以简单地传递curl命令?我不想用方法等制作一个复杂的脚本,只是简单的几行代码commands@TazMan:传递curl命令的简单方法是我给您的第一件事。这是两行代码——如果您不关心超过80列,那么很可能是一行代码。这能简单多少?谢谢。我不确定subprocess.call是做什么的。我当然只打算使用第一种方法,因为我不是python开发人员,我希望让脚本一开始就简单。如果你能详细说明第一个选项,那将非常有帮助,其他选项对我来说有点太多了。另外,`p=subprocess.Popen(cmd,stdout=subprocess.PIPE)out,\=p.communicate()'看起来很有趣。如果你能详细说明的话。。我希望能够捕获http返回代码,如200/400等,以便成功地进行监控等@TazMan:“check_call not work”(检查调用不起作用)不是一个有用的注释,如果您想帮助调试代码的话。您必须显示您尝试的代码和错误或不正确的结果,否则没有人可以帮助您。至于通信,您是否查看了文档中的概述、该函数,或者关于用子流程替换其他函数的部分?这比我能解释得更清楚。如果你在阅读后有一个具体的问题,我可以回答。