Ответ CouchDB POST, который был отправлен через curl через модуль подпроцесса Python, теряется (код curl 53). Почему это?

1

Я пытаюсь добавить документ в 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 находится на моей локальной машине, и, как я уже упоминал выше, она отлично работает.

Теги:
couchdb
subprocess

1 ответ

2
Лучший ответ

Вы не включаете shell=True. Subprocess не будет использовать вашу оболочку, если вы этого не сделаете, поэтому у вас будут отличия от выполнения в командной строке.

retcode = subprocess.call(args, shell=True)

Это должно решить вашу проблему. Обратите внимание, что это может привести к тому, что args не будут работать корректно, поскольку вместо этого может потребоваться строка. Если это так, попробуйте:

retcode = subprocess.call(' '.join(args), shell=True)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню