Python 3.x 如何在python脚本无限期运行时刷新boto3 credetials

Python 3.x 如何在python脚本无限期运行时刷新boto3 credetials,python-3.x,boto3,python-watchdog,Python 3.x,Boto3,Python Watchdog,我正在尝试编写一个python脚本,它使用watchdog查找文件创建,并使用boto3将其上传到s3。但是,我的boto3凭据每12小时过期一次,因此我需要续订。我正在~/.aws/credentials中存储我的boto3凭据。因此,现在我正在尝试捕获s3uploadfailedererror,更新凭据,并将其写入~/.aws/credentials。但是,尽管凭证正在更新,我正在再次调用bot3.client('s3')它的抛出异常 我做错了什么?或者我如何解决它 下面是代码片段 try:

我正在尝试编写一个python脚本,它使用watchdog查找文件创建,并使用boto3将其上传到s3。但是,我的boto3凭据每12小时过期一次,因此我需要续订。我正在
~/.aws/credentials
中存储我的boto3凭据。因此,现在我正在尝试捕获
s3uploadfailedererror
,更新凭据,并将其写入
~/.aws/credentials
。但是,尽管凭证正在更新,我正在再次调用bot3.client('s3')它的抛出异常

我做错了什么?或者我如何解决它

下面是代码片段

try:
     s3 = boto3.client('s3')
     s3.upload_file(event.src_path,'bucket-name',event.src_path)

except boto3.exceptions.S3UploadFailedError as e:
     print(e)
     get_aws_credentials()
     s3 = boto3.client('s3')

根据,客户端在多个位置查找凭据,还有其他选项更友好,您可能需要考虑,而不是<代码> .AWS/Client < /Cord>Field.< /P> 引用文件:

Boto3搜索凭据的顺序为:

  • 在boto.client()方法中将凭据作为参数传递
  • 创建会话对象时将凭据作为参数传递
  • 环境变量
  • 共享凭据文件(~/.aws/credentials)
  • AWS配置文件(~/.AWS/config)
  • 担任提供者角色
在您的情况下,由于您已经捕获到异常并更新凭据,我只需将新的凭据传递给客户端的新实例,如下所示:

client=boto3.client(
“s3”,
aws\u访问\u密钥\u id=新的\u访问\u密钥,
aws_secret_access_key=新的_secret_key,
aws_会话_令牌=新的_会话_令牌
)

如果您在代码的别处使用这些相同的凭据来创建其他客户机,我会考虑将它们设置为环境变量:

导入操作系统
os.environ['AWS\u ACCESS\u KEY\u ID']=新的\u ACCESS\u KEY
os.environ['AWS\u SECRET\u ACCESS\u KEY']=NEW\u SECRET\u KEY
os.environ['AWS_SESSION_TOKEN']=新的_SESSION_TOKEN
再次引用文件:

仅当您使用临时凭据时,才需要AWS帐户的会话密钥[…]