来自Python Subprocess的Curl命令将输出存储到变量中

时间:2016-08-29 12:04:15

标签: python api curl pipe subprocess

我使用下面的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的命令。

2 个答案:

答案 0 :(得分:0)

您可以使用子进程PIPE捕获stdout和stderr,如下所示:

>>> 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>

答案 1 :(得分:0)

我的坏:(

实际上,我正处于防火墙后面的安全连接上。 因此,我必须在拨打电话之前设置代理。

tag1 = nil
tag2 = nil

这就是为什么我应该休息一下。 : - /