python如何使用jt400.jar包代码实例
作者:白马酒凉 发布时间:2021-05-07 03:50:46
标签:python,jt400,jar,包
这篇文章主要介绍了python如何使用jt400.jar包代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
代码如下
jt400helper.py
#coding=utf-8
import jpype
import os
class JT400Helper(object):
def __init__(self, server,username,pwd):
jvmpath=r"C:\Program Files\Java\jre1.8.0_60\bin\server\jvm.dll"
jarpath=r'd:\temp\jt400.jar'
jvmArg = "-Djava.class.path=%s" % jarpath
jpype.startJVM(jvmpath,jvmArg)
#jt400
AS400=jpype.JClass('com.ibm.as400.access.AS400')
CommandCall=jpype.JClass('com.ibm.as400.access.CommandCall')
ProgramCall=jpype.JClass('com.ibm.as400.access.ProgramCall')
SpooledFileList=jpype.JClass('com.ibm.as400.access.SpooledFileList')
AS400Text=jpype.JClass('com.ibm.as400.access.AS400Text')
AS400JDBCDriver=jpype.JClass('com.ibm.as400.access.AS400JDBCDriver')
#java
Connection=jpype.JClass('java.sql.Connection')
DatabaseMetaData=jpype.JClass('java.sql.DatabaseMetaData')
Statement=jpype.JClass('java.sql.Statement')
self.ResultSet=jpype.JClass('java.sql.ResultSet')
self.server,self.username,self.pwd = server,username,pwd
self.RJobLog=jpype.JClass('com.ibm.as400.resource.RJobLog')
self.AS400FTP=jpype.JClass('com.ibm.as400.access.AS400FTP')
self.IFSFile=jpype.JClass('com.ibm.as400.access.IFSFile')
self.ObjectDescription=jpype.JClass('com.ibm.as400.access.ObjectDescription')
self.ProgramParameter=jpype.JClass('com.ibm.as400.access.ProgramParameter')
self.DriverManager=jpype.JClass('java.sql.DriverManager')
self.DriverManager.registerDriver(AS400JDBCDriver())
self.system=AS400(server,username,pwd)
self.cc=CommandCall(self.system)
self.outqueue = SpooledFileList(self.system)
self.pc = ProgramCall(self.system)
def ShowIfs(self,ifspath):
ifs=self.IFSFile(self.system,ifspath)
print 'exists : ',ifs.exists()
print 'isDirectory : ',ifs.isDirectory()
print 'isFile : ',ifs.isFile()
fs=ifs.listFiles()
if len(fs)>0:
for f in fs:
print f.name
def ShowObj2(self,lib,obj):
od = self.ObjectDescription(system,lib,obj,"FILE")
print od.CHANGE_DATE_AND_TIME
def ShowObj(self,lib,obj,tmplib):
cmdstr = "DSPOBJD OBJ(%s/%s) OBJTYPE(*PGM) OUTPUT(*OUTFILE) OUTFILE(%s/OBJD)" % (lib,obj,tmplib)
msg = self.GetCmdMsg(cmdstr)
if msg == "":
cmdstr = "SELECT ODLBNM, ODOBNM, ODOBTP, ODOBAT,ODOBSZ , ODOBTX, ODLDAT, ODLTIM, ODOBSY, ODCRTU, ODJRST, ODJRNM, ODJRLB, ODJRIM, ODJREN,ODJRCN, ODJRDT, ODJRTI FROM %s.objd" % tmplib
self.GetSQLResult(cmdstr)
def SaveFieldDef(self,flib,file,tmplib,ofile):
cmdstr = "DSPFFD FILE(%s/%s) OUTPUT(*OUTFILE) OUTFILE(%s/FIELDDEF)" % (flib,file,tmplib)
msg = self.GetCmdMsg(cmdstr)
if msg == "":
cmdstr = "SELECT WHFLDI, WHFTXT, WHFLDT, WHFLDD, WHFLDP,WHFLDB, WHFOBO FROM %s.FIELDDEF WHERE WHFLDI <> ' ' ORDER BY WHFOBO" % tmplib
self.GetSQLResult(cmdstr,ofile)
def SaveJobLog(self,jobstr,ofile):
msg = self.GetJobLog(jobstr)
with open(ofile,'w') as f:
f.write(msg)
def GetJobLog(self,jobstr):
jobarr = jobstr.split('/')
jobnum,jobuser,jobname=jobarr[0],jobarr[1],jobarr[2]
return self.GetJobLogByNum(jobnum,jobuser,jobname)
def GetJobLogByNum(self,jobnum,jobuser,jobname):
joblog=self.RJobLog(self.system,jobname,jobuser,jobnum)
joblog.open()
joblog.waitForComplete()
num=joblog.getListLength()
msgs = []
for i in range(0,num):
qmsg=joblog.resourceAt(i)
msgs.append(qmsg.getAttributeValue("MESSAGE_TEXT"))
msg = '\n'.join(msgs)
return msg
def GetSQLResult(self,cmdstr,ofile=""):
connection = self.DriverManager.getConnection("jdbc:as400://" + self.server, self.username, self.pwd)
dmd = connection.getMetaData()
select = connection.createStatement(self.ResultSet.TYPE_SCROLL_SENSITIVE,self.ResultSet.CONCUR_UPDATABLE)
print cmdstr
rs = select.executeQuery(cmdstr)
strs = ""
cols = rs.getMetaData().getColumnCount()
while (rs.next()):
rowstrs = []
for i in range(1,cols+1):
value = rs.getString(i)
if ' ' in value:
value = '"%s"' % value
rowstrs.append(rs.getString(i))
strs+=','.join(rowstrs)+'\n'
connection.close();
if ofile <> "":
with open(ofile,'w') as f:
f.write(strs)
else:
print strs
def CallProgram(self,plib,pgm,paras):
#WRKACTJOB SBS(QUSRWRK) JOB(QZRCSRVS) - dump not work
#paras=["Y","12345"," "]
pgmparas=[]
for para in paras:
pgmparas.append(ProgramParameter(para))
print str(pgmparas.getInputData())
self.pc.setProgram("/QSYS.LIB/%s.LIB/%s.PGM" % (plib,pgm),pgmparas)
successfully = self.pc.run()
msg = ''
job = pc.getJob()
print pc.toString()
print job.toString()
if successfully <> True:
ml=self.pc.getMessageList()
for m in ml:
msg += m.getText() +'\n'
print msg
self.system.disconnectAllServices()
return msg
def GetCmdMsg(self,cmdstr):
msg = ''
print cmdstr
successfully = self.cc.run(cmdstr)
if successfully <> True:
ml=self.cc.getMessageList()
for m in ml:
msg += m.getText() +'\n'
print msg
return msg
def CheckObjExists(self,lib,file,type="*FILE"):
str = "CHKOBJ OBJ(%s/%s) OBJTYPE(%s)" % (lib,file,type)
return self.GetCmdMsg(str)
def DeleteObj(self,lib,file):
str = "DLTF FILE(%s/%s)" % (lib,file)
return self.GetCmdMsg(str)
def FileToIfs(self,lib,file,mem,ifspath):
# don't use RMVBLANK(*TRAILING) ,will cause numeric field contains blank characters error when put ifs to file
str = "CPYTOIMPF FROMFILE(%s/%s %s) TOSTMF('%s') MBROPT(*REPLACE) STMFCCSID(*STMF) RCDDLM(*CRLF) DTAFMT(*DLM) STRDLM(*NONE)" % (lib,file,mem,ifspath)
print lib,file,mem,"->",ifspath
return self.GetCmdMsg(str)
def IfsToFile(self,ifspath,lib,file,mem):
str = "CPYFRMIMPF FROMSTMF('%s') TOFILE(%s/%s %s) MBROPT(*REPLACE) RCDDLM(*CRLF) STRDLM(*NONE) FLDDLM(',') ERRRCDOPT(*REPLACE) RPLNULLVAL(*FLDDFT)" % (ifspath,lib,file,mem)
print ifspath,"->",lib,file,mem
return self.GetCmdMsg(str)
def FileToPc(self,lib,file,mem,ofile):
tmpifs = "QDLS/TEMP/%s.CSV" % mem
self.FileToIfs(lib,file,mem,tmpifs)
self.FtpGetIfsFile(tmpifs,ofile)
def PcToFile(self,ifile,lib,file,mem):
tmpifs = "QDLS/TEMP/%s.CSV" % mem
self.FtpPutIfsFile(ifile,tmpifs)
self.IfsToFile(tmpifs,lib,file,mem)
def FtpGetIfsFile(self,ifspath,ofile):
ftp=self.AS400FTP(self.system)
successfully = ftp.get(ifspath,ofile)
print ifspath,"->",ofile
return successfully
def FtpGetText(self,lib,srcf,mem,dest=r"d:\temp"):
ftp=self.AS400FTP(self.system)
target="/QSYS.LIB/%s.LIB/%s.FILE/%s.MBR" % (lib,srcf,mem)
if os.path.isdir(dest):
dest=os.path.join(dest,mem+".txt")
print target,"->",dest
successfully = ftp.get(target,dest)
return successfully
def FtpGetSavf(self,lib,savf,dest=r"d:\temp"):
ftp=self.AS400FTP(self.system)
target="/QSYS.LIB/%s.LIB/%s.SAVF" % (lib,savf)
# QUOTE SITE NAMEFMT 0 QGPL/QCLSRC.TEST
# QUOTE SITE NAMEFMT 1 /QSYS.lib/Libname.lib/Fname.file/Mname.mbr
ftp.issueCommand("quote site namefmt 1")
if os.path.isdir(dest):
dest=os.path.join(dest,savf+".SAVF")
# can not get it if not set data transfer type
ftp.setDataTransferType(1)
successfully = ftp.get(target,dest)
return successfully
def FtpPutIfsFile(self,ifile,ifspath):
ftp=self.AS400FTP(self.system)
successfully = ftp.put(ifile,ifspath)
print ifile,"->",ifspath
return successfully
def FtpPutText(self,ifile,lib,srcf,mem):
ftp=self.AS400FTP(self.system)
dest="/QSYS.LIB/%s.LIB/%s.FILE/%s.MBR" % (lib,srcf,mem)
successfully = ftp.put(ifile,dest)
print ifile,"->",lib,srcf,mem
return successfully
def GetOutQList(self,outqlib,outq):
print "OutQueue : %s/%s" % (outqlib,outq)
self.outqueue.setQueueFilter("/QSYS.LIB/%s.LIB/%s.OUTQ" % (outqlib,outq))
self.outqueue.setUserFilter("*ALL")
self.outqueue.openSynchronously()
enums=self.outqueue.getObjects()
i = 1
info = ""
while (enums.hasMoreElements()):
splf=enums.nextElement()
if(splf<>None):
strs=[]
strs.append("System :%s , File : %s , File Number : %s , Progarm :%s , Date : %s" % (splf.getStringAttribute(271),splf.getStringAttribute(104),splf.getIntegerAttribute(105).toString(),splf.getStringAttribute(272),splf.getStringAttribute(34)))
strs.append("Number/User/Job : %s/%s/%s" % (splf.getStringAttribute(60),splf.getStringAttribute(62),splf.getStringAttribute(59)))
strs.append("File Pages: %s , Print quality : %s , Printer device type : %s , Page size length : %d " % (splf.getIntegerAttribute(111).toString(),splf.getStringAttribute(48),splf.getStringAttribute(90),splf.getFloatAttribute(78).intValue()))
info += '\n'.join(strs)+'\n'
i+=1
self.system.disconnectAllServices()
print "total spool files : ",i
print info
def GetSpoolFile(self,sflib,sffile,sfname,sfjobnum,fnum,dest):
if self.CheckObjExists(sflib,sffile)<>"":
# IGCDTA parameter is for DBCS file
self.GetCmdMsg("CRTPF FILE(%s/%s) RCDLEN(160) IGCDTA(*YES)" % (sflib,sffile))
str = "CPYSPLF FILE(%s) TOFILE(%s/%s) JOB(%s) SPLNBR(%d)" % (sfname,sflib,sffile,sfjobnum,fnum)
msg = self.GetCmdMsg(str)
if msg == "":
self.FtpGetText(sflib,sffile,sffile,dest)
print "download successfully!"
def PutMsg(self,qlib,qname,msg): qstr = "/QSYS.LIB/%s.LIB/%s.DTAQ" % (qlib,qname) dataqueue=self.DataQueue(self.system,qstr) dataqueue.write(msg) def GetMsg(self,qlib,qname): qstr = "/QSYS.LIB/%s.LIB/%s.DTAQ" % (qlib,qname) dataqueue=self.DataQueue(self.system,qstr) dqdata = dataqueue.read() dqdatastr = 'No data' if dqdata <> None: dqdatastr = dqdata.getString() print dqdatastr return dqdatastr
if __name__ == '__main__':
pass
来源:https://www.cnblogs.com/sui84/p/8448462.html
0
投稿
猜你喜欢
- 这几天忙个合作,开发iPhone版校友录。用了很久的iPhone,为它量身定制一套页面还是头一次,好在限制不是很多,会写html基本呈现就不
- 曾有位网友遇到这样一个问题:产品名称为“A&T Plastic”,在产品列表中需要做这样的超链接,<a href="
- 引子如果遇到了 Must provide secret_key to use csrf错误提醒,原因就是没有设置secret_key ,在代
- 为了把事情变成简单化,我在多个Oracle数据上建立统一的检查数据库账户,并且账户只能访问特定的几个视图(需要查询的sql已生成视图),具体
- int connectDb() { EXEC SQL BEGIN DECLARE SECTION; char username[20]; c
- 本文实例讲述了Python中defaultdict与lambda表达式用法。分享给大家供大家参考,具体如下:从教程中看到defaultdic
- 问题:我想每日从数据库里导出一些数据,内容基本上都是一样的,只是时间不同,比如导出一张表wjzcreate table wjz(id int
- 反向单位矩阵单位矩阵即对角线为 1,如下:那么反向的单位矩阵就是反对角线为 1:左右镜像操作这里采用 numpy 实现。方案 1import
- 平行坐标图,一种数据可视化的方式。以多个垂直平行的坐标轴表示多个维度,以维度上的刻度表示在该属性上对应值,相连而得的一个折线表示一个样本,以
- documentFragment 是一個無父對象的document對象.他支持以下DOM2方法:appendChild, cloneNode
- 1.find函数find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含
- 一、简介urllib 库,它是 Python 内置的 HTTP 请求库,不需要额外安装即可使用,它包含四个模块:`request` 请求模块
- 前言本来打算写的标题是XPath语法,但是想了一下Python中的解析库lxml,使用的是Xpath语法,同样也是效率比较高的解析方法,所以
- 定义神经网络继承nn.Module类;初始化函数__init__:网络层设计;forward函数:模型运行逻辑。class NeuralNe
- 动态变量名赋值在使用 tkinter 时需要动态生成变量,如动态生成 var1...var10 变量。使用 exec 动态赋值exec 在
- 如下所示:a[:, np.newaxis] # 给a最外层中括号中的每一个元素加[]a[np.newaxis, :] # 给a最外层中括号中
- 本文实例讲述了Python面向对象之类的定义与继承用法。分享给大家供大家参考,具体如下:定义一个类类中的方法同,类外方法,默认传self值类
- 目录Python Web 应用部署方案WSGI 规范WSGI 实际应用作为 Python Web 开发者来说,在开发程序阶段一般是不会接触到
- 1.什么是守护进程守护进程是脱离于终端并且在后台运行的进程。守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会
- 前言opencv中封装了一个专门用于求解cv::Mat均值的函数,即cv::mean(&cv::Mat),该函数会得到Mat中各个通