Python子进程中的Curl命令,用于将输出存储到变量中

Python子进程中的Curl命令,用于将输出存储到变量中,python,api,curl,pipe,subprocess,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 NEg0VU9QR1BZODAWVI4N1dLUFpXRz

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

您可以使用子流程管道捕获标准输出和标准输出,如下所示:

>>> 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>
导入子流程 >>>p=子进程.Popen([“curl”,”https://google.co.uk“],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
>>>print p.stdout.read()#您可以使用子流程管道捕获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>
导入子流程 >>>p=子进程.Popen([“curl”,”https://google.co.uk“],stdout=subprocess.PIPE,stderr=subprocess.PIPE) >>>打印p.stdout.read()(

事实上,我在防火墙后面的一个安全连接上。 因此,我必须在调用之前设置代理

    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)
这就是我应该休息的原因。-/

我的坏:(

事实上,我在防火墙后面的一个安全连接上。 因此,我必须在调用之前设置代理

    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)
这就是为什么我应该休息一下-/