通过Python的子进程模块通过curl发送的CouchDB POST响应正在丢失(卷曲代码53)。这是为什么?

时间:2011-06-02 12:22:50

标签: python couchdb subprocess

我正在尝试使用curl通过子进程模块从python向couchDB添加文档。我可以从命令行完成,但不能从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 个答案:

答案 0 :(得分:2)

您不包括shell = True。如果不这样做,子进程将不会使用你的shell,因此你将与在命令行上运行有所不同。

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

那应该可以解决你的问题。请注意,这可能会导致args无法正常工作,因为它可能需要一个字符串。如果是这种情况,请尝试:

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