用渲染模板的方式来解决。
[mysqld]
basedir = {{basedir}}
datadir = {{datadir}}
port = {{port}}
user = {{user}}
代码实现
我在渲染引擎的选择上使用了 jinja2 这个模板引擎,去掉其它逻辑一个最小化的代码如下。
#!/usr/bin/env python3
from jinja2 import Environment,FileSystemLoader
def render_mysql_config_file():
#通过文件系统加载器,加载当前目录下的 my.cnf.jinja 模板文件
env = Environment(loader=FileSystemLoader(searchpath='./'))
tmpl = env.get_template('my.cnf.jinja')
#给要渲染的参数指定值
cnfs = {
'basedir': '/usr/local/mysql/',
'datadir': '/database/mysql/data/3306/',
'port': 3306,
'user'; 'mysql3306'
}
tmpl.globals=cnfs
#不保存到 /etc/my.cnf 了,直接输出到 stdout
print(tmpl.render())
if __name__ == "__main__":
render_mysql_config_file()运行效果如下
python3 cnfs.py
[mysqld] basedir = /usr/local/mysql/ datadir = /database/mysql/data/3306/ port = 3306 user = mysql3306