Создать команду curl в python для помещения в скрипт мониторинга python
Я могу выдавать команды CURL для экземпляра моего механизма asticsearch из командной строки, как показано ниже. Но как я могу выполнить эти команды в скрипте мониторинга Python? Я могу использовать только встроенные в Python 2.7 стандартные пакеты 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 ответ
Если вы можете создать список аргументов в виде строк, вы можете легко использовать модуль подпроцесса. Например:
def curl_delete(url):
cmd = ['curl', '-XDELETE', url]
subprocess.check_call(cmd)
Если вы хотите использовать код возврата в качестве значения, а не просто увеличивать на ненулевое значение:
return subprocess.call(cmd)
Или, если вы хотите получить stdout в качестве значения, или что-то еще... Смотрите раздел документации по подпроцессам о замене команд оболочки. Обычно вы хотите что-то вроде:
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()
Это вернет объект, который может дать вам код ответа и сообщение, заголовки и тело. Смотрите примеры для более подробной информации.