我只能通过使用cURL来检索我的数据,我认为子进程是更简单的方法,但是我不能将数据放在变量中。
例如像这样
data = subprocess.call('curl "URL" -X GET', shell=True)
通过python有没有简单的方法呢?
答案 0 :(得分:4)
如果您尝试使用子流程执行此操作并希望调用结果,那么您正在寻找check_output
:
data = subprocess.check_output(["curl", URL])
但是,我建议您使用Python中的requests库来完成您的工作。丰富的功能将使您的生活更轻松。
以下是使用请求的简单示例:
确保先安装了请求。它不是内置库。我链接的URL将解释如何执行此操作。
>>> import requests
>>> d = requests.get("http://www.google.ca")
>>> print(d)
<Response [200]>
您可以从该响应中获得大量数据。如果您执行d.text
,您将收到文本回复。我建议你阅读文档以了解如何使用它。这是一个功能齐全的图书馆,拥有众多功能。
我建议您查看所需的所有其他内容的文档。
答案 1 :(得分:1)
试试这个:
data = subprocess.Popen(command, shell=True, stdout = subprocess.PIPE, stderr=subprocess.PIPE)
std_out, std_err = data.communicate()
该页面还包含有关shell=True
危险的原因的说明。值得一读
修改强>
这是做你想做的事的艰难方法。它有效,所以我发布了一个替代方案,但我建议@idjaw答案
答案 2 :(得分:0)
以下方法对我有用。如果您需要使用多个参数运行命令,它可以使用:
def run_shell_command(cmd, params):
cmd_list = []
cmd_list.append(cmd)
cmd_list + string.split(params)
p = subprocess.Popen(cmd_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
std_out, std_err = p.communicate()
return std_out, std_err
然后,按如下方式调用该函数:
outp = run_shell_command('curl', '\"URL\" -X GET')
P.S:你don't需要使用shell=True