首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自Python子进程的Curl命令将输出存储到变量中

来自Python子进程的Curl命令将输出存储到变量中
EN

Stack Overflow用户
提问于 2016-08-29 20:04:15
回答 2查看 1.9K关注 0票数 0

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

有什么建议吗?我确实在Spyder控制台上看到了输出,但从未在变量中看到过。

代码语言:javascript
复制
    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

编辑:我的环境详情。我在Windows7上,从Anaconda Spyder IDE执行命令。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-29 20:22:20

因为工作在防火墙后面的安全连接上。因此,我必须在进行调用之前设置代理。

代码语言:javascript
复制
    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)
票数 0
EN

Stack Overflow用户

发布于 2016-08-29 20:15:56

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

代码语言:javascript
复制
>>> 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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39205906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档