You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中执行AWS CLI命令获取QuickSight数据集存储信息?

解决Python subprocess执行AWS CLI命令无法获取QuickSight数据集输出的问题

你遇到的问题是因为默认情况下subprocess.run()不会捕获命令的标准输出,只能拿到执行状态码和命令本身。要获取AWS CLI返回的QuickSight数据集信息,需要明确配置参数捕获输出,以下是具体解决方法:

方法一:正确使用subprocess捕获CLI输出

通过指定stdout=subprocess.PIPE来捕获命令的标准输出,同时可以捕获错误输出用于排查问题。示例代码如下:

import subprocess
import json

# 替换为你的AWS账号ID
AWS_ACCOUNT_ID = "123456789012"

# 构建AWS CLI命令(用列表形式避免shell注入风险)
cli_cmd = [
    "aws",
    "quicksight",
    "list-data-sets",
    "--aws-account-id",
    AWS_ACCOUNT_ID
]

# 执行命令并捕获输出,text=True直接返回字符串格式
execution_result = subprocess.run(
    cli_cmd,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    text=True
)

# 处理执行结果
if execution_result.returncode == 0:
    # 将CLI返回的JSON字符串解析为Python字典
    datasets_storage_info = json.loads(execution_result.stdout)
    # 现在datasets_storage_info就是存储了数据集信息的变量
    print("成功获取数据集信息:")
    print(datasets_storage_info)
else:
    # 命令执行失败时打印错误信息
    print(f"CLI命令执行失败:{execution_result.stderr}")

关键说明:

  • 使用列表形式传递命令参数:避免shell注入风险,同时无需处理转义字符
  • text=True:让subprocess直接返回字符串类型的输出,省去手动解码字节流的步骤(Python 3.6及以下版本可用universal_newlines=True替代)
  • 捕获stderr:方便排查命令执行失败的原因,比如权限不足、账号ID错误等

方法二:使用AWS SDK for Python(boto3)更优雅实现

相比调用外部CLI命令,直接使用boto3(AWS官方Python SDK)是更符合Python生态的方案,无需依赖AWS CLI的安装和配置,示例代码如下:

import boto3

# 替换为你的AWS账号ID
AWS_ACCOUNT_ID = "123456789012"

# 初始化QuickSight客户端
quicksight_client = boto3.client("quicksight")

try:
    # 调用API获取数据集列表
    api_response = quicksight_client.list_data_sets(AwsAccountId=AWS_ACCOUNT_ID)
    # 提取数据集存储信息到变量
    datasets_storage_info = api_response["DataSetSummaries"]
    print("成功获取数据集信息:")
    print(datasets_storage_info)
except Exception as e:
    print(f"获取数据集信息失败:{str(e)}")

优势:

  • 直接操作Python对象,无需解析JSON字符串
  • 错误处理更灵活,可直接捕获AWS API返回的异常
  • 无需依赖外部CLI工具,部署更简洁

内容的提问来源于stack exchange,提问作者reuben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:03:19