如何在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
相关产品推荐
相关产品推荐

