Flask 使用 boto3 仅返回最后一个值或第一个值
Flask returning only the last value or first value using boto3
我正在使用下面的脚本生成特定 IAM 角色名称的列表,它在控制台上工作得很好,并按预期列出 IAM 角色名称。
import boto3
import logging
from botocore.exceptions import ClientError
logging.basicConfig(format='%(message)s')
logger = logging.getLogger('LUCIFER')
logger.setLevel(logging.INFO)
def main():
try:
client = boto3.client('iam')
roles = client.list_roles(PathPrefix='/', MaxItems=1000)
for i in roles["Roles"]:
if "sts:AssumeRoleWithSAML".lower() in str(i).lower():
logger.info(i["RoleName"])
return i["RoleName"]
except ClientError:
logger.exception("Couldn't list roles for the account")
raise
if __name__ == "__main__":
main()
但是当我尝试通过下面的 flask 脚本提供这个脚本时,它只有 returns 最后一个值。
from flask import Flask
from main import main
app = Flask(__name__)
@app.route("/", methods = ['GET'])
def index():
return main()
if __name__ == "__main__":
app.run(host="127.0.0.1", port=8080, debug=True)
有什么提示吗?我需要另一个 html 模板来提供它吗?
我的最终目标是通过 Vue.js 前端框架为其提供服务,如有任何想法,我们将不胜感激。
您可能将它与记录到控制台的输出混淆了。
只有最后一个值是从 main()
编辑的 return,当在控制台上 运行 时,你什么都不做。
实际上 return 一个值列表,如果 roles["Roles"]
是一个空列表,这也修复了一个错误,因为 i
不会被设置:
def main():
try:
client = boto3.client('iam')
roles = client.list_roles(PathPrefix='/', MaxItems=1000)
result = []
for i in roles["Roles"]:
if "sts:AssumeRoleWithSAML".lower() in str(i).lower():
logger.info(i["RoleName"])
result.append(i["RoleName"])
return result
except ClientError:
logger.exception("Couldn't list roles for the account")
raise
更新:returnJSON列表
from flask import jsonify
@app.route("/", methods = ['GET'])
def index():
rolenames = main()
return jsonify(rolenames)
我正在使用下面的脚本生成特定 IAM 角色名称的列表,它在控制台上工作得很好,并按预期列出 IAM 角色名称。
import boto3
import logging
from botocore.exceptions import ClientError
logging.basicConfig(format='%(message)s')
logger = logging.getLogger('LUCIFER')
logger.setLevel(logging.INFO)
def main():
try:
client = boto3.client('iam')
roles = client.list_roles(PathPrefix='/', MaxItems=1000)
for i in roles["Roles"]:
if "sts:AssumeRoleWithSAML".lower() in str(i).lower():
logger.info(i["RoleName"])
return i["RoleName"]
except ClientError:
logger.exception("Couldn't list roles for the account")
raise
if __name__ == "__main__":
main()
但是当我尝试通过下面的 flask 脚本提供这个脚本时,它只有 returns 最后一个值。
from flask import Flask
from main import main
app = Flask(__name__)
@app.route("/", methods = ['GET'])
def index():
return main()
if __name__ == "__main__":
app.run(host="127.0.0.1", port=8080, debug=True)
有什么提示吗?我需要另一个 html 模板来提供它吗?
我的最终目标是通过 Vue.js 前端框架为其提供服务,如有任何想法,我们将不胜感激。
您可能将它与记录到控制台的输出混淆了。
只有最后一个值是从 main()
编辑的 return,当在控制台上 运行 时,你什么都不做。
实际上 return 一个值列表,如果 roles["Roles"]
是一个空列表,这也修复了一个错误,因为 i
不会被设置:
def main():
try:
client = boto3.client('iam')
roles = client.list_roles(PathPrefix='/', MaxItems=1000)
result = []
for i in roles["Roles"]:
if "sts:AssumeRoleWithSAML".lower() in str(i).lower():
logger.info(i["RoleName"])
result.append(i["RoleName"])
return result
except ClientError:
logger.exception("Couldn't list roles for the account")
raise
更新:returnJSON列表
from flask import jsonify
@app.route("/", methods = ['GET'])
def index():
rolenames = main()
return jsonify(rolenames)