Создать команду 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()

Это вернет объект, который может дать вам код ответа и сообщение, заголовки и тело. Смотрите примеры для более подробной информации.

Другие вопросы по тегам