如何在python中运行shell命令

Posted

技术标签:

【中文标题】如何在python中运行shell命令【英文标题】:How to run shell commands inside python 【发布时间】:2021-08-30 04:05:37 【问题描述】:

我需要创建 AWS lambda 函数来执行 python 程序。 我需要在其中加入以下 shell 命令。

curl https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.region=="ap-southeast-1") | .ip_prefix'

有人可以指导我吗?

【问题讨论】:

这有帮助吗? ***.com/questions/89228/… 相同:***.com/questions/14457756/… 这听起来像是一个 X/Y 问题——你真的不应该花时间去curljq 下载和解析 JSON。 【参考方案1】:

为了简单地使用 curl 和 jq 来获取数据,

import subprocess

data = subprocess.check_output("""curl https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.region=="ap-southeast-1") | .ip_prefix'""", shell=True)

但你真的可能不应该这样做,因为例如无法保证您在 Lambda 执行环境中拥有 curljq(更不用说开销了)。

相反,如果您有 requests 库,

import requests

resp = requests.get("https://ip-ranges.amazonaws.com/ip-ranges.json")
resp.raise_for_status()
prefixes = 
    r["ip_prefix"]
    for r in resp.json()["prefixes"]
    if r["region"] == "ap-southeast-1"

【讨论】:

非常感谢。他们是我将所有 IP 存储在一个文件中的一种方式吗 一般来说是的,当然你可以把它们写到一个文件中。但是,您不能在 lambda 函数中写入文件。 明白。我需要获取这些输出 IP 并将它们存储在一个文件中,然后将文件转储到 S3 以进行进一步处理。 所以你需要将它们存储在 S3 中吗?很好,你可以做到; boto3 库是 Python 的首选 S3 客户端。

以上是关于如何在python中运行shell命令的主要内容,如果未能解决你的问题,请参考以下文章

如何在 IPython 中运行 shell 命令? (Python Profiling GUI 工具)

shell脚本中调用JAVA 程序,如何让JAVA运行结束后,再执行下面命令(只有java运行完,下面对数据的处理才有用)

使用 python 运行 windows shell 命令

在多个输入文件上运行shell程序[重复]

python 用IDLE能运行 用shell不能运行

需要从 Python 脚本运行 shell 命令并存储在变量中 [重复]