使用子进程调用时卷曲不起作用

时间:2016-01-27 17:00:45

标签: python curl subprocess python-2.6

我正在尝试用curl调用REST api。 api端点在程序中动态生成,并且还会上传json文件。

with open('data.json','w') as f:
    f.write(json.dumps(data))
    cmd = 'curl -X PUT -H "Content-Type: application/json" -d @data.json {0}'.format(put_uri)
    print cmd
    p= subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
    p.wait()
    output, errors = p.communicate()
    if p.returncode != 0:
        print "Request failed"

这里我正在打印所形成的命令,当我从shell运行该命令时,它正在按预期工作。但是同样的命令运行时Popen抛出一些json验证错误,这是错误的

{
  "success" : false,
  "message" : "Resource cannot be parsed due to Unexpected character ('/' (code 47)): maybe a (non-standard) comment? (not recognized as one since Feature 'ALLOW_COMMENTS' not enabled for parser)\n at [Source: java.io.StringReader@444c7495; line: 1, column: 2]"
}

1 个答案:

答案 0 :(得分:1)

此代码在调用curl之前不确保将JSON完全写入磁盘。

f.flush()之后使用f.close()f.write(json.dumps(data))