如何将子流程的结果放入变量中

How to put results of subprocess in a variable

我只能通过使用 cURL 来检索我的数据,我认为子进程是更简单的方法,但我不能将数据放在变量中。

比如像这样

data = subprocess.call('curl "URL" -X GET', shell=True)

有什么简单的方法可以通过 python 做到这一点吗?

如果您尝试使用子流程执行此操作并想要调用的结果,那么您正在寻找 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,您将收到文本回复。我建议您阅读文档以了解如何使用它。它是一个功能齐全的库,具有大量功能。

我建议您浏览文档以获取您想要的所有其他内容。

试试这个:

data = subprocess.Popen(command, shell=True, stdout = subprocess.PIPE, stderr=subprocess.PIPE)
std_out, std_err = data.communicate()

Docs

该页面还包含有关 shell=True 为什么危险的描述。值得一读

编辑:

这是做你想做的事情的艰难方式。它有效,所以我发布了一个替代方案,但我推荐@idjaw answers

以下方法对我有用。它可能是可用的,如果你需要 运行 命令有一个以上的参数:

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