使用Python os模块调用aws-cli结合jq命令时出现语法错误
问题解决方法
核心错误点及修复步骤
Python导入语句拼写错误
原代码中iport os是拼写错误,改为import os。AWS CLI命令参数混乱
- 移除无效的
" -I)片段,这是多余的语法错误内容。 - 修正时间参数格式:AWS CLI的
--time-period不支持直接在参数内做日期运算,需用date命令生成符合要求的ISO格式日期。例如计算2022-10-31加1个月减1秒的日期,使用$(date -d "2022-10-31 +1 month -1 second" +%Y-%m-%dT%H:%M:%S)。
- 移除无效的
单引号冲突导致语法错误
os.system的命令用单引号包裹,内部jq脚本的单引号会提前终止字符串,需将jq脚本内的单引号转义为\'(在Python字符串中,单引号需要转义才能被正确识别)。jq排序逻辑修正
原jq脚本中的sort_by(.Amount)无效,因为每个对象的键是服务名称(动态的),需改为sort_by(.[]?.Amount)来根据嵌套的Amount值排序。
修正后的完整代码
import os os.system('aws ce get-cost-and-usage --profile dev --time-period Start=2022-10-01,End=$(date -d "2022-10-31 +1 month -1 second" +%Y-%m-%dT%H:%M:%S) --granularity MONTHLY --metrics USAGE_QUANTITY BLENDED_COST --group-by Type=DIMENSION,Key=SERVICE | /bin/jq \'[ .ResultsByTime[].Groups[] | select(.Metrics.BlendedCost.Amount > "0") | { (.Keys[0]): .Metrics.BlendedCost } ] | sort_by(.[]?.Amount) | add\' > /tmp/cost.json')
注意事项
- 如果是macOS系统,默认
date命令不支持-d参数,需安装coreutils(brew install coreutils)后使用gdate替代date。
内容的提问来源于stack exchange,提问作者user2023
相关产品推荐
相关产品推荐

