当前位置: 首页 > 知识库问答 >
问题:

使用子进程调用时,Curl不工作

杨成礼
2023-03-14

我试图用curl调用RESTAPI。apiendpoint在程序中动态生成,并上载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个答案

陆建木
2023-03-14

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

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

 类似资料:
  • 问题内容: 我正在使用Python脚本来调用Java虚拟机。以下命令有效: 但, 不起作用。避免使用Python文档建议。 问题答案: 您需要将命令拆分为单独的字符串: 在以下情况下可以使用字符串,但是在以下情况下您需要一个参数列表 该shlex模块是很有用的更因此对于更复杂的命令和处理输入,但良好的了解: shlex tut

  • 我试图执行命令从使用使用下面的脚本 下面是回溯 命令在我的终端上运行良好,而不是在Groovy上。原因又能是什么呢?

  • 问题内容: Python版本:2.6.7 我在for循环中有以下subprocess.call,该循环被执行18次,但是,该过程始终挂在第19个循环上: 控制台输出如下所示: 由于我对python脚本不是很熟悉,所以我只是在徘徊我是否在做错什么…我怀疑某个地方出现了死锁。 会处理这些问题吗? 在什么情况下subprocess.call会挂起任何专家答案?非常感谢 问题答案: 当使用子过程时,我倾向

  • #include <stdio.h> #include <stdlib.h> int main(void) { pid_t pid; pid = fork(); if (pid < 0) { exit(1); } else if (pid > 0) { printf("Parent\n");

  • 使用初始版本和: 正确的工作scp命令是: 是否有现成的解决方案? 如果不是,什么是健壮的方法:

  • 问题内容: 我正在使用curl(通过PHP)抓取一个网站,我想要的一些信息是产品列表,默认情况下仅显示前几个产品。其余的将在用户单击按钮以获取产品的完整列表时传递给用户,从而触发ajax调用以返回该列表。 简而言之,这是他们使用的JS: 这是我的PHP脚本: 这将在该站点上产生一个错误页面。我认为主要原因可能是: 他们检查这是否是ajax请求(不知道如何解决) 令牌必须在标题中,而不在post变量