1、jenkins 配置

2、jenkins 脚本

ansible-playbook /opt/test.yaml --extra-vars "loanno=${loanno}" --extra-vars "type=${type}"

中转机器脚本

test.yaml
---
- name: 开始导出合同
hosts: test
tasks:
- name: 执行导出脚本
shell: echo {{ loanno }}
shell: echo {{ type }}
shell: echo loanno
shell: python /app/crontab/python/autocontract/contract_supplement.py {{ loanno }} {{ type }}
register: result
- name: 打印输出结果
debug: msg="{{ result }}"

3、远程机器下载脚本

python /python/autocontract/contract_supplement.py {{ loanno }} {{ type }}

4、python 脚本

# coding:utf8
import sys
import xlwt
import mysql.connector
import datetime
import send_mail
import os
import time
import file_tar nowtime = datetime.datetime.now().strftime('%Y%m%d')
oddir="/app/crontab/python"
#filename = "%s/cma_registerinfo%s.xls"%(oddir,nowtime)
file_count = 0
end_date=time.strftime("%Y-%m-%d", time.localtime()) tmp_dir='/app/crontab/python/autocontract'
tmp_file_list='tmp.txt'
sorce_dir='/data/nfs/yyapp/yylending/usercontract'
ods_dir='/app/crontab/python/autocontract/tmp'
filename=ods_dir+'/test.tar.gz'
#var_loan=''
#var_type='' #sql='select path from test where loadNo in (%s) and cid in(%s);' %(var_loan,var_type) config = {
'user': '******',
'password': ''******',',
'host': ''******',',
'port': ''******',',
'database': ''******',',
'charset': 'utf8'
} mail_list = {
'sender':'xiajq@PH-LOTH-V159.localdomain', #发件人
'receivers':'test@qq.com', #收件人
'title':'*****', #邮件主题
'content':'*****', #邮件内容
'attfilename':'',#附件内容
'server':'localhost' #发送邮件服务器。默认为本机
} def get_conn():
conn = mysql.connector.connect(**config)
return conn def query_all(cur, sql, args):
'''
#参数说明
:param cur:
:param sql: 执行的sql
:param args: sql中的桉树
:return:
'''
print(sql)
print(args)
cur.execute(sql, args)
return cur.fetchall() def export_excle(filename, sql, outputpath):
'''
# 参数说明
:param filename: 文件名称
:param sql: 执行脚本
:param outputpath: 输出路径
:return:
'''
file_count = 0
try:
conn = get_conn()
cur = conn.cursor()
# 查询结果 tar_file
results = query_all(cur=cur, sql=sql, args=None)
print(type(results))
if len(results):
file_tar.copy_file(sorce_dir, ods_dir, *results)
file_tar.tar_file(ods_dir, 'test.tar.gz')
file_count = file_count + 1
else:
print("返回结果为空") finally:
if conn:
conn.close()
return file_count # 结果测试
if __name__ == "__main__":
# sql = input("请输入要查询的sql:")
#filename = input("请输入excle的名字")
var_loan="'"+sys.argv[1].replace(',',"','")+"'" #接受jeknins传递的值
var_type="'"+sys.argv[2].replace(',',"','")+"'" #接受jeknins传递的值
arg=[var_loan,var_type]
print(var_loan+var_type)
sql='select contract_path from contract where loadNo in (%s) and cid in(%s);' %(var_loan,var_type)
print(sql)
file_count = export_excle(filename, sql, oddir) #执行导出结果
if os.path.exists(filename) and os.path.getsize(filename)>0:
if file_count >=1:
print("邮件已经发送 %s"%(mail_list['attfilename']))
mail_list['attfilename'] = filename
print("邮件已经发送 %s"%(mail_list['attfilename']))
send_mail.sendmail(**mail_list)
else :
print("文件大小为空,请检查")
else :
print("文件不存在,请联系管理员检查脚本是否有异常"
#!/user/bin/python
#-*- coding: utf-8 -*-
import sys
import os
import shutil
import tarfile
import zipfile
import io
# coding:utf8
# author: xiajq
# 实现批量输入借据号和uid导出合同并且重名自动打包发送到邮箱需要人的邮箱
#1、在jenkins 界面输入借据号和uid 2.调用Python脚本实现将邮件自动拷贝到临时目录,打包发送到对应收件人的邮箱 reload(sys)
sys.setdefaultencoding('utf-8')#添加该方法声明编码 tmp_dir='/test/autocontract'
tmp_file_list='tmp.txt'
sorce_dir='/test/usercontract'
ods_dir='test/tmp'
def copy_file(sorce_dir,ods_dir,*file_list):
'''
拷贝文件
:param tmp_file_list: 记录文件名字
:param sorce_dir: 源文件
:param ods_dir: 目标文件
:return:
'''
for line in list(file_list):
line = ''.join(line)
print(line)
print(type(line))
new_name = line.replace('/', '_')
print("开始拷贝")
print("拷贝后的名称为 %s" % new_name)
# ods_file="%s/%s"%(ods_dir,new_name)
ods_file = ods_dir + '/' + new_name
print(type(line))
# filename=line.strip().encode('utf-8')
soure_file = "%s/%s" % (sorce_dir, line)
print(soure_file)
print(ods_file)
shutil.copy(soure_file, ods_file)
print("拷贝成功") def tar_file(dir,tarname):
'''
打包某个目录下的所有文件
:param dir: 需要打包的目录
:param tarname: 打包的名字
:return:
'''
os.chdir(ods_dir)
tf = tarfile.open(tarname, "w:gz")
for fname in os.listdir(ods_dir):
print(fname)
if fname.endswith(".pdf"):
tf.add(fname)
print(tf.members)
print(tf.name)
tf.close()

3、发送邮件

#coding=utf-8
import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.utils import formataddr
from email.utils import parseaddr, formataddr
from email.mime.multipart import MIMEMultipart mail_list = {
'sender':'admin@qq.com', #发件人
'receivers':'test@qq.com', #收件人
'title':'云测推荐失败数据监控', #邮件主题
'content':'云测推荐失败数据见附件。请及时查看原因', #邮件内容
'filename':'',#附件内容
'server':'localhost' #发送邮件服务器。默认为本机
} def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr)) # def sendmail(**kwargs):
#sender,receivers,title,content,filename,server = 'localhost'
'''
:param sender: 发件人 my_sender = 'test1@qq.com,test2@qq.com'
:param receivers: 收件人
:param title: 邮件标题
:param content: 邮件内容
:param attfilename: 附件名称
:param server: 服务器的名字默认为localhost,本机
:return:
'''
message = MIMEMultipart()
message['From'] = _format_addr(kwargs['sender'])
message['Subject'] = Header(kwargs['title'], 'utf-8')
# message['To'] = _format_addr(kwargs['receivers']) #收件人只显示自己
# print(kwargs['receivers'])
message['To'] = kwargs['receivers']# 可以看得见多个收件人 #
message.attach(MIMEText(kwargs['content'], 'plain', 'utf-8'))
att1 = MIMEText(open(kwargs['attfilename'], 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename=%s'%(kwargs['attfilename'])
message.attach(att1) try:
smtpObj = smtplib.SMTP(kwargs['server'])
smtpObj.sendmail(kwargs['sender'], kwargs['receivers'].split(','), message.as_string())
print(kwargs['receivers'].split(','))
except smtplib.SMTPException:
print("Error: 无法发送邮件")

python实用脚本-通过jenkins界面化导出数据的更多相关文章

  1. Python 实用脚本

    Python 实用脚本 脚本写的好,下班下得早!程序员的日常工作除了编写程序代码,还不可避免地需要处理相关的测试和验证工作. 例如,访问某个网站一直不通,需要确定此地址是否可访问,服务器返回什么,进而 ...

  2. 8 个 Python 实用脚本,赶紧收藏备用!

    脚本写的好,下班下得早!程序员的日常工作除了编写程序代码,还不可避免地需要处理相关的测试和验证工作. 例如,访问某个网站一直不通,需要确定此地址是否可访问,服务器返回什么,进而确定问题在于什么.完成这 ...

  3. python实用脚本-定时导出数据库中的数据并且发送数据到邮箱

    1.发送邮件脚本 #coding=utf-8 import smtplib from email.header import Header from email.mime.text import MI ...

  4. python实用脚本集

    iScript 是Github上 PeterDing 大神写的一个脚本集,由多数的 python 脚本和少数GM脚本组成. 含有以下几个脚本: xiami.py - 下载或播放高品质虾米音乐(xiam ...

  5. 8 个 Python 实用脚本,【速】收藏备用!

    脚本写的好,下班下得早!程序员的日常工作除了编写程序代码,还不可避免地需要处理相关的测试和验证工作. 例如,访问某个网站一直不通,需要确定此地址是否可访问,服务器返回什么,进而确定问题在于什么.完成这 ...

  6. IDEA整合Jenkins界面化管理项目构建

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/WALK_MAN_wubiao/articl ...

  7. Shell脚本 统计店中店导出数据

    有一个数据文件  yue.csv  是这样的   #head yue.csv  日期,商家名称,要求在线数,当天在线数,要求在线时长,在线时长达标数,   ……"2017-12-31&quo ...

  8. Python实用案例,Python脚本,Python实现批量加水印

    往期回顾 Python实现自动监测Github项目并打开网页 Python实现文件自动归类 Python实现帮你选择双色球号码 Python实现每日更换"必应图片"为"桌 ...

  9. Python实用案例,Python脚本,Python实现自动监测Github项目并打开网页

    往期回顾 Python实现文件自动归类 前言: 今天我们就利用Python脚本实现Github项目的更新,提醒方式是邮箱.直接开整~ 项目地址: https://github.com/kenwoodj ...

随机推荐

  1. python数据操作--8

    转:https://www.tuicool.com/wx/MB7nieb 数据类型 整数, 浮点数, 字符串, 布林值(True,False) 列表(list), 不可变的列表 Tuple, 集合(没 ...

  2. JoJoGAN 实践

    JoJoGAN: One Shot Face Stylization. 只用一张人脸图片,就能学习其风格,然后迁移到其他图片.训练时长只用 1~2 min 即可. code paper 效果: 主流程 ...

  3. 10分钟了解代码命名规范(Java、Python)

    前言 关于代码命名,我相信是经常困扰很多小伙伴的一个问题,尤其是对于强迫症晚期患者.怎么说呢,每次小编在写代码之前,总会在想啊想啊,用什么命名法好呢?对于经常在C++.Java.Python等主流语言 ...

  4. AT3913 XOR Tree

    经过长时间的思考,我发现直接考虑对一条链进行修改是很难做出本题的,可能需要换一个方向. 可以发现本题中有操作的存在,是没有可以反过来做的做法的,因此正难则反这条路应该走不通. 那么唯一的办法就是简化这 ...

  5. windows平台编码转换

    int AsciiToUtf8(char* pSrc, unsigned int nSrcLen, char* pBuffer, unsigned int nBufferLen) { assert(p ...

  6. 关于增强for循环的使用

    1 class MultipleQUestion extends Question{ //多选题类 2 3 private char[] answer; //多选题答案属性 4 5 public ch ...

  7. docker 介绍及安装操作

    docker 介绍及安装操作 1.docker概述 2.docker安装及操作 1.docker概述: Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源 是在L ...

  8. MySQL 数据库高级操作 (配图)

    MySQL数据库高级操作 1.一键部署mysql 数据库 2.数据表高级操作 3.数据库用户管理 4.数据库用户授权 1.首先一键部署mysql 数据库 : 可以看我之前的博客 https://www ...

  9. 第10讲:Flink Side OutPut 分流

    Flink系列文章 第01讲:Flink 的应用场景和架构模型 第02讲:Flink 入门程序 WordCount 和 SQL 实现 第03讲:Flink 的编程模型与其他框架比较 第04讲:Flin ...

  10. gitlab登录时出现402的错误

    当登录gitlab时出现402的错误提示,可进行以下操作 重新设置一下系统时间 在new project 时若还出现同样的402问题,则清除一下浏览器的cookie即可