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)

または、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()

これにより、応答コードとメッセージ、ヘッダー、および本文を提供できるオブジェクトが返されます。詳細については、を参照してください。

于 2013-10-21T18:05:03.480 に答える