jinja2批量生成python脚本

? 在使用airflow的过程中需要大量的dag脚本进行性能测试,如果一个个去编写dag脚本未免太过麻烦,于是想到用python的jinja2模板引擎实现批量脚本生成。

先通过pip命令安装jinja2模块:

$ pip install jinja2

然后创建模板文件(模板可以是任何形式的文本格式,没有特定扩展名,甚至可以不要扩展名):

dag_template

from datetime import timedelta, datetime
import pytz
from airflow.operators.bash_operator import BashOperator
from airflow.operators.dummy_operator import DummyOperator
from airflow.models import DAG

default_args = {
    ‘owner‘: ‘cord‘,
    # ‘depends_on_past‘: False,
    ‘depends_on_past‘: True,
    # ‘start_date‘: airflow.utils.dates.days_ago(2),
    ‘wait_for_downstream‘: True,
    ‘execution_timeout‘: timedelta(minutes=3),
    ‘email‘: [‘[email protected]‘],
    ‘email_on_failure‘: False,
    ‘email_on_retry‘: False,
    ‘retries‘: 1,
    ‘retry_delay‘: timedelta(minutes=5),
}

tz = pytz.timezone(‘Asia/Shanghai‘)
dt = datetime(2018, 7, 19, 18, 20, tzinfo=tz)
utc_dt = dt.astimezone(pytz.utc).replace(tzinfo=None)
dag = DAG(
    ‘{{ dag_name }}‘,
    default_args=default_args,
    description=‘my DAG‘,
    schedule_interval=‘*/1 * * * *‘,
    start_date=utc_dt
)
root = DummyOperator(task_id=‘root‘, dag=dag)
for i in range(50):
    i = str(i)
    task = BashOperator(
        task_id=‘task‘+i,
        bash_command= ‘echo `date`‘,
        dag=dag)
    task.set_downstream(root)

jinja2中有两种分隔符: {% ... %}{{ ... }} ,其中{% ... %}用于执行for循环或者赋值语句,{{ ... }}负责将表达式的值填充到模板中。这里使用{{ ... }}用于填充dag文件的dag_id 。

通过该模板即可批量生成dag脚本文件,生成代码如下:

Tool.py

import os
from jinja2 import Environment, FileSystemLoader

#获取模板
env = Environment(loader = FileSystemLoader(searchpath=""))
template = env.get_template("dag_template")

#删除已有的生成文件
for f in os.listdir("./output"):
    path_file = os.path.join("./output", f)
    if os.path.isfile(path_file):
        os.remove(path_file)

#生成新的文件
for i in range(1, 101):
    output = template.render({‘dag_name‘ : "benchmark%d" % i})
    with open("./output/bm%d.py" % i, ‘w‘) as out:
        out.write(output)

通过执行Tool.py即可批量生成dag脚本文件了。

原文地址:https://www.cnblogs.com/cord/p/9412840.html

时间: 2024-08-28 04:45:33

jinja2批量生成python脚本的相关文章

SSH密钥对批量认证Python脚本

用于集群中管理机器上的密钥对分发 版本:Python2.7 模块:paramiko.multiprocessing 备注:注意在脚本70行左右获取远程服务器秘钥指纹信息的时候不同的操作系统可能会有出入,如果使用本脚本务必在本地测试通过 # -*- coding:utf-8 -*- import sys reload(sys), sys.setdefaultencoding('utf-8') import os import time import paramiko import multipro

数据生成python脚本

下面是项目结构: --data 存放数据的文件夹 --main.cpp 题目的正确数据 --prodData.py 生成输入输出数据脚本 --test.cpp 测试代码 --testData.py 测试代码是否正确脚本 prodData.py #-*- coding:utf-8 -*- ''' @auther: Starry @file: prodData.py @time: 2018/1/17 15:47 ''' import random import os DATASIZE = 10 ''

使用docopt生成Python脚本参数项

简介 相比较optparse和argparse,docopt更节省程序员的编写脚本参数提示和参数项时间,但更随意和不规范,且代码维护性更差 使用案例: # coding=utf-8 """1 #这儿写标题,-h的时候会被打印出来 Usage: #没有出现在Usage中的不规范用法,将会打印Usage段,并sys.exit(1) 1.py D_IP init_instance [--configSvr] [--replname=<replSetName>] [-P

批量生成DDL脚本

获取用户下所有索引脚本,用于数据迁移后重建索引: set pagesize 0set long 90000set feedback offset echo offspool get_index_ddl.sqlSELECT to_char(DBMS_METADATA.GET_DDL('INDEX',u.index_name))||' nologging '||' parallel 4;' FROM USER_INDEXES u; spool off 获取用户下所有表脚本: set pagesize

批量生成多个账户并设置密码

问题1:批量创建10个系统账号ucode01-ucode10并设置密码(密码不能相同) #!/bin/bashfor n in $(seq -w 10)do      useradd ucode-$n      echo "$n"|passwd --stdin ucode-$ndone [[email protected] scripts]# sh adduser01.shChanging password for user ucode-01.passwd: all authentic

分享一个免杀的反弹shell工具(python脚本转换成exe)

有时候网站服务器上有杀毒软件,我们上传的nc.exe.lcx.exe等工具都被杀了,这时候就需要一款免杀的工具来反弹shell. 这篇博客主要是依据国外的一片文章翻译而来,根据国外大佬的教程将Python脚本转换成exe程序即可免杀. 参考链接:https://medium.com/bugbountywriteup/antivirus-evasion-with-python-49185295caf1 第1步:安装Python2.7和Py2exe 一定要安装32位的Python 2.7和32位的P

python脚本批量生成数据

在平时的工作中,经常会遇到造数据,特别是性能测试的时候更是需要大量的数据.如果一条条的插入数据库或者一条条的创建数据,效率未免有点低.如何快速的造大量的测试数据呢?在不熟悉存储过程的情况下,今天给大家介绍一种方法,很简单的也很实用.思路是用python代码写一段小程序,生成一定数量的SQL语句,再把这些SQL语句拷贝黏贴到数据库工具执行SQL即可. 假如有个联系人的学生表student,其表结构为姓名name.学校school.电话telphone.邮箱email. 以Mysq为例子,sql语句

python+jinja2实现接口数据批量生成工具

在做接口测试的时候,我们经常会遇到一种情况就是要对接口的参数进行各种可能的校验,手动修改很麻烦,尤其是那些接口参数有几十个甚至更多的,有没有一种方法可以批量的对指定参数做生成处理呢. 答案是肯定的! python的jinja2模板库可以很好的满足我们的需求,通过维护一个原始数据模板,将我们想要动态生成的变量模板化,就可以实现需求. 现在我们有这样的一个请求数据 { "abc":"123", "p2p":"123", "

做U3d编辑器xlsx批量生成csv和python批量转

做U3d编辑器xlsx批量生成csvxlsx编辑就是用强大的office Excel 2013 ,  也就是说 不管是程序还是美术只需要维护这个Excel就够了,然后一键批量转化为csv文件即可! 打包不会打包Excel,游戏中也不用这个!然后来到Unity3d的编辑器菜单.在Unity的Editor文件夹下面需要这四个文件: 参考了:http://www.codeproject.com/Articles/246772/Convert-xlsx-xls-to-csv 的window窗口程序. 游