Python设置AWS临时凭证报错:'list'对象无writelines属性
问题排查与解决方案
报错原因分析
AttributeError: 'list' object has no attribute 'writelines' 是因为你代码中调用writelines()方法的对象是列表,而非合法的文件句柄。比如可能误将列表赋值给了文件变量,或者打开文件时的错误操作返回了列表而非文件对象。
完整实现脚本
以下是满足你需求的Python脚本,自动完成AWS临时凭证的获取与环境变量设置:
import os import subprocess import json def get_aws_temp_credentials(): # 设置AWS_PROFILE环境变量 os.environ['AWS_PROFILE'] = 'terraformlive' # 获取MFA信息 mfa_device_arn = input("请输入MFA设备ARN: ") mfa_code = input("请输入MFA验证码: ") # 调用aws sts get-session-token获取临时凭证 cmd = [ 'aws', 'sts', 'get-session-token', '--serial-number', mfa_device_arn, '--token-code', mfa_code ] try: result = subprocess.run(cmd, capture_output=True, text=True, check=True) credentials = json.loads(result.stdout)['Credentials'] except subprocess.CalledProcessError as e: print(f"获取临时凭证失败: {e.stderr}") return # 生成export命令 export_commands = [ f"export AWS_ACCESS_KEY_ID={credentials['AccessKeyId']}", f"export AWS_SECRET_ACCESS_KEY={credentials['SecretAccessKey']}", f"export AWS_SESSION_TOKEN={credentials['SessionToken']}", f"export AWS_EXPIRATION={credentials['Expiration']}" ] # 打印命令供用户执行,或写入文件 print("\n请执行以下命令设置环境变量:") for cmd in export_commands: print(cmd) # 可选:写入临时脚本文件,方便一键执行 with open('set_aws_creds.sh', 'w') as f: f.writelines([cmd + '\n' for cmd in export_commands]) print("\n已生成set_aws_creds.sh脚本,执行source set_aws_creds.sh即可生效") if __name__ == "__main__": get_aws_temp_credentials()
关键注意事项
- 确保已安装AWS CLI并配置好
terraformliveprofile - MFA设备ARN可在AWS IAM控制台获取
- 脚本生成的环境变量仅在当前终端会话生效,若需持久化可写入
~/.bashrc或~/.zshrc - 脚本中
with open(...) as f确保了f是合法文件句柄,调用f.writelines()不会触发原报错
内容的提问来源于stack exchange,提问作者arooz
相关产品推荐
相关产品推荐

