我使用下面的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的命令。
答案 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
这就是为什么我应该休息一下。 : - /