Ответ CouchDB POST, который был отправлен через curl через модуль подпроцесса Python, теряется (код curl 53).Это почему? - PullRequest
1 голос
/ 02 июня 2011

Я пытаюсь добавить документ в couchDB из python, используя curl через модуль подпроцесса.Я могу сделать это нормально из командной строки, но не из Python.

Вот код командной строки

curl -X POST http://doug:enter@localhost:5984/mydb/ -H "Content-Type: application/json" -d {}

Документ создается каждый раз с этой командой.Однако та же команда из Python через модуль подпроцесса не выполняется.Мне интересно, может ли кто-нибудь точно определить, где и почему ответ теряется (CouchDB должен отправить ответ, но ошибка в том, что curl его не получает).

вот код.

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

1 Ответ

2 голосов
/ 02 июня 2011

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

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

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

retcode = subprocess.call(' '.join(args), shell=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...