1
p = Popen(["curl", "http://localhost:8983/solr/update/json?commit=true", "--data-binary", "@solrData.json", "-H", "Content-type:application/json"], cwd=r"C:/Users/SOLR/docs", shell=True)

これは私が現在使用しているコードで、curl が認識されないというエラーが表示されます。solrData.json ファイルがある同じディレクトリでコマンドを実行すると:

curl "http://localhost:8983/solr/update/json?commit=true" --data-binary @solrData.json -H "Content-type:application/json"

それは完璧に動作します。カールはシステムパスにあり、すべてが機能します。また、比較として、これはうまく機能します:

p = Popen("java -jar post.jar solrData.xml", cwd=r"C:/Users/SOLR/docs")

編集

    import requests
# open the file to upload
        with open('C:/Users/SOLR/docs/solrData.json', 'rb') as fin:
            # execute the post request
            headers = {'Content-type': 'application/json'}
            r = requests.post("http://localhost:8983/solr/update/json", params=dict(commit="true"), headers=headers, data=fin.read())

これが機能するソリューションです。zmo と Martijn Pieters の助けに感謝します。

4

2 に答える 2

2

引数のリストを渡していますが、 set shell=True. 後者をオフにして (引数を削除します。Falseこれがデフォルトです)、Python にコマンドを処理させます。

p = Popen(["curl", "http://localhost:8983/solr/update/json?commit=true", "--data-binary", "@solrData.json", "-H", "Content-type:application/json"], cwd=r"C:/Users/SOLR/docs")

python-requestsライブラリをインストールし、最小限の手間で Python からすべてのタスクを実行する方がはるかに簡単であることに注意してください。

import requests

with open('C:/Users/SOLR/docs/solrData.json', 'r') as solrdata:
    r = requests.post('http://localhost:8983/solr/update/json?commit=true',
        data=solrdata, headers={'Content-type': 'application/json'})
于 2013-06-26T10:56:10.190 に答える