【问题标题】:Curl command from Python Subprocess to store output into variable来自 Python 子进程的 curl 命令将输出存储到变量中
【发布时间】:2017-01-05 11:08:48
【问题描述】:

我正在使用以下 python 代码从 url 读取数据。来自 unix 的 curl 命令有效。但是当我尝试将返回的 json 存储在 python 变量中时,它总是空白。

任何指针?我确实在 Spyder 控制台上看到了输出,但从未在变量中看到。

    p =sp.Popen(["curl","-i","-X", "POST" ,"-H", "Content-Type:application/json" ,"-H", "Authorization:Basic NEg0VU9QR1BZODAWVI4N1dLUFpXRzp4SVpxUUkzbUFuVG9RUlJDcXBLWkdB","-d", '{ "grant_type": "client_credentials" }', "https://rridata.wikimapia.com/v1.0/oauth/token/"], stdout = sp.PIPE, shell=False)
#p =sp.check_output(['curl','-i','-X', 'POST' ,'-H', 'Content-Type:application/json' ,'-H', 'Authorization:Basic NEg0VU9QR1BZODATEpDc2oyNGRGa0c5SVpxUUkzbUFuVG9RUlJDcXBLWkdB','-d', '{ "grant_type": "client_credentials" }', 'https://rdata.wikimapia.com/v1.0/oauth/token/'])
out,err = p.communicate()
print out

编辑:我的环境详细信息。我在 Windows 7 上,从 Anaconda Spyder IDE 执行命令。

【问题讨论】:

    标签: python api curl pipe subprocess


    【解决方案1】:

    您可以使用子进程 PIPE 来捕获标准输出和标准错误,如下所示:

    >>> import subprocess
    >>> p = subprocess.Popen(["curl", "https://google.co.uk"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    >>> print p.stdout.read()  # <-- you can assign a variable to the content of stdout
    <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
    <TITLE>301 Moved</TITLE></HEAD><BODY>
    <H1>301 Moved</H1>
    The document has moved
    <A HREF="https://www.google.co.uk/">here</A>.
    </BODY></HTML>
    

    【讨论】:

      【解决方案2】:

      自从在防火墙后建立安全连接以来。 因此,我必须在拨打电话之前设置代理。

          os.environ['https_proxy']="https://iss-uk.corporate.pb.com:80"
      p =sp.Popen(["curl","-i","-X", "POST" ,"-H", "Content-Type:application/json" ,"-H", "Authorization:Basic NEg0VU9QR1BZODAWVI4N1dLUFpXRzp4WG1HczbUFuVG9RUlJDcXBLWkdB","-d", '{ "grant_type": "client_credentials" }', "https://rridata.wikimapia.com/v1.0/oauth/token/"], stdout = sp.PIPE, shell=False)
      #p =sp.check_output(['curl','-i','-X', 'POST' ,'-H', 'Content-Type:application/json' ,'-H', 'Authorization:Basic NEg0VU9QR1BZODATEpDc2oyNGRGa0c5SVpxUUkzbUFuVG9RUlJDcXBLWkdB','-d', '{ "grant_type": "client_credentials" }', 'https://rdata.wikimapia.com/v1.0/oauth/token/'])
      out,err = p.communicate()
      print ("out:",out,"err:",err)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-06
        • 2012-04-03
        • 1970-01-01
        • 2012-06-21
        • 2011-12-31
        • 2015-03-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多