Я пытаюсь добавить документ в couchDB из python, используя curl через модуль subprocess. Я могу сделать это хорошо из командной строки, но не из python.
Вот код командной строки
curl -X POST http://doug:enter@localhost:5984/mydb/ -H "Content-Type: application/json" -d {}
Документ создается каждый раз с помощью этой команды. Однако эта же команда из Python через модуль подпроцесса выходит из строя. Мне интересно, может ли кто-нибудь определить, где и почему, ответ потерялся (CouchDB должен отправить ответ, но ошибка в том, что завиток не получает).
вот код.
import subprocess
args = ['curl', '-X', 'POST', 'http://doug:enter@localhost:5984/mydb/', '-H', '"Content-Type: application/json"', '-d', '{}']
try:
retcode = subprocess.call(args)
except OSError:
print('os error')
except ValueError:
print('value error')
print(retcode)
Дополнительная информация:
Я запускаю Kubuntu 11.04, curl 7.21.3 и Python 2.7.1
База данных CouchDB находится на моей локальной машине, и, как я уже упоминал выше, она отлично работает.
Вы не включаете shell=True. Subprocess не будет использовать вашу оболочку, если вы этого не сделаете, поэтому у вас будут отличия от выполнения в командной строке.
retcode = subprocess.call(args, shell=True)
Это должно решить вашу проблему. Обратите внимание, что это может привести к тому, что args не будут работать корректно, поскольку вместо этого может потребоваться строка. Если это так, попробуйте:
retcode = subprocess.call(' '.join(args), shell=True)