python - 将文件输入的标准输出保存到文件
问题描述
抱歉,但我对 python 很陌生,我需要一个脚本来按模式搜索并将整行替换为文件,我插入了整个脚本,但问题出在with fileinput...
#!/usr/bin/env python3
import json
import requests
import sys
import fileinput
url = 'http://169.254.169.254/latest/meta-data/iam/security-credentials/test'
r = requests.get(url)
accesskey = json.loads(r.content.decode('utf-8'))['AccessKeyId']
secretkey = json.loads(r.content.decode('utf-8'))['SecretAccessKey']
with fileinput.input(files=('./envFile.sh')) as envfile:
for line in envfile:
if line.strip().startswith('export AWS_ACCESS_KEY='):
line = 'AWS_ACCESS_KEY="%s"\n' % (accesskey)
if line.strip().startswith('export AWS_SECRET_KEY='):
line = 'AWS_SECRET_KEY="%s"\n' % (secretkey)
sys.stdout.write(line)
输出是:
AWS_ACCESS_KEY="xxxxxxx"
AWS_SECRET_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxx"
现在,输出是正确的,但是我必须覆盖文件,我该怎么办?
解决方案
采用inplace=True
前任:
import fileinput
with fileinput.input(files='./envFile.sh', inplace=True) as envfile:
for line in envfile:
if line.strip().startswith('export AWS_ACCESS_KEY='):
print(line.replace(line.strip(), 'AWS_ACCESS_KEY="%s"' % (accesskey)))
elif line.strip().startswith('export AWS_SECRET_KEY='):
print(line.replace(line.strip(), 'AWS_SECRET_KEY="%s"' % (secretkey)))
else:
print(line)
推荐阅读
- angular - 为什么从这个 Observable 到 Promise 的转换在我的 Angular 应用程序中不起作用?
- json - Swift:网络请求后的完成处理程序
- python - 如何将每日数据值转换为熊猫最新可用日历周内天数的百分比差异?
- javascript - 如何将变量从 Django 的渲染方法的上下文参数传递到前端的 javascript 脚本?
- arrays - Mongodb查询无法按数组内的字段排序
- microsoft-dynamics - 为 RecId 创建新的数据实体
- c++ - 无法在 linux (i686-w64-mingw32-g++) 上交叉编译包含 sqlite 的 c++ 类(未定义参考)
- amazon-web-services - 错误:java.lang.RuntimeException:PipeMapRed.waitOutputThreads():子进程在 AWS-EMR 上失败,代码为 1,但在本地机器上工作
- mysql - select语句后如何在mysql存储过程中插入值
- python - Fantasy 超级联赛赛程表上的线性规划问题