我正在尝试使用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数据库在我的本地计算机上,正如我上面提到的,它的工作正常。
答案 0 :(得分:2)
您不包括shell = True。如果不这样做,子进程将不会使用你的shell,因此你将与在命令行上运行有所不同。
retcode = subprocess.call(args, shell=True)
那应该可以解决你的问题。请注意,这可能会导致args无法正常工作,因为它可能需要一个字符串。如果是这种情况,请尝试:
retcode = subprocess.call(' '.join(args), shell=True)