python如何使用jt400.jar包代码实例
这篇文章主要介绍了python如何使用jt400.jar包代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
代码如下
jt400helper.py
#coding=utf-8
importjpype
importos
classJT400Helper(object):
def__init__(self,server,username,pwd):
jvmpath=r"C:\ProgramFiles\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)
defShowIfs(self,ifspath):
ifs=self.IFSFile(self.system,ifspath)
print'exists:',ifs.exists()
print'isDirectory:',ifs.isDirectory()
print'isFile:',ifs.isFile()
fs=ifs.listFiles()
iflen(fs)>0:
forfinfs:
printf.name
defShowObj2(self,lib,obj):
od=self.ObjectDescription(system,lib,obj,"FILE")
printod.CHANGE_DATE_AND_TIME
defShowObj(self,lib,obj,tmplib):
cmdstr="DSPOBJDOBJ(%s/%s)OBJTYPE(*PGM)OUTPUT(*OUTFILE)OUTFILE(%s/OBJD)"%(lib,obj,tmplib)
msg=self.GetCmdMsg(cmdstr)
ifmsg=="":
cmdstr="SELECTODLBNM,ODOBNM,ODOBTP,ODOBAT,ODOBSZ,ODOBTX,ODLDAT,ODLTIM,ODOBSY,ODCRTU,ODJRST,ODJRNM,ODJRLB,ODJRIM,ODJREN,ODJRCN,ODJRDT,ODJRTIFROM%s.objd"%tmplib
self.GetSQLResult(cmdstr)
defSaveFieldDef(self,flib,file,tmplib,ofile):
cmdstr="DSPFFDFILE(%s/%s)OUTPUT(*OUTFILE)OUTFILE(%s/FIELDDEF)"%(flib,file,tmplib)
msg=self.GetCmdMsg(cmdstr)
ifmsg=="":
cmdstr="SELECTWHFLDI,WHFTXT,WHFLDT,WHFLDD,WHFLDP,WHFLDB,WHFOBOFROM%s.FIELDDEFWHEREWHFLDI<>''ORDERBYWHFOBO"%tmplib
self.GetSQLResult(cmdstr,ofile)
defSaveJobLog(self,jobstr,ofile):
msg=self.GetJobLog(jobstr)
withopen(ofile,'w')asf:
f.write(msg)
defGetJobLog(self,jobstr):
jobarr=jobstr.split('/')
jobnum,jobuser,jobname=jobarr[0],jobarr[1],jobarr[2]
returnself.GetJobLogByNum(jobnum,jobuser,jobname)
defGetJobLogByNum(self,jobnum,jobuser,jobname):
joblog=self.RJobLog(self.system,jobname,jobuser,jobnum)
joblog.open()
joblog.waitForComplete()
num=joblog.getListLength()
msgs=[]
foriinrange(0,num):
qmsg=joblog.resourceAt(i)
msgs.append(qmsg.getAttributeValue("MESSAGE_TEXT"))
msg='\n'.join(msgs)
returnmsg
defGetSQLResult(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)
printcmdstr
rs=select.executeQuery(cmdstr)
strs=""
cols=rs.getMetaData().getColumnCount()
while(rs.next()):
rowstrs=[]
foriinrange(1,cols+1):
value=rs.getString(i)
if''invalue:
value='"%s"'%value
rowstrs.append(rs.getString(i))
strs+=','.join(rowstrs)+'\n'
connection.close();
ifofile<>"":
withopen(ofile,'w')asf:
f.write(strs)
else:
printstrs
defCallProgram(self,plib,pgm,paras):
#WRKACTJOBSBS(QUSRWRK)JOB(QZRCSRVS)-dumpnotwork
#paras=["Y","12345",""]
pgmparas=[]
forparainparas:
pgmparas.append(ProgramParameter(para))
printstr(pgmparas.getInputData())
self.pc.setProgram("/QSYS.LIB/%s.LIB/%s.PGM"%(plib,pgm),pgmparas)
successfully=self.pc.run()
msg=''
job=pc.getJob()
printpc.toString()
printjob.toString()
ifsuccessfully<>True:
ml=self.pc.getMessageList()
forminml:
msg+=m.getText()+'\n'
printmsg
self.system.disconnectAllServices()
returnmsg
defGetCmdMsg(self,cmdstr):
msg=''
printcmdstr
successfully=self.cc.run(cmdstr)
ifsuccessfully<>True:
ml=self.cc.getMessageList()
forminml:
msg+=m.getText()+'\n'
printmsg
returnmsg
defCheckObjExists(self,lib,file,type="*FILE"):
str="CHKOBJOBJ(%s/%s)OBJTYPE(%s)"%(lib,file,type)
returnself.GetCmdMsg(str)
defDeleteObj(self,lib,file):
str="DLTFFILE(%s/%s)"%(lib,file)
returnself.GetCmdMsg(str)
defFileToIfs(self,lib,file,mem,ifspath):
#don'tuseRMVBLANK(*TRAILING),willcausenumericfieldcontainsblankcharacterserrorwhenputifstofile
str="CPYTOIMPFFROMFILE(%s/%s%s)TOSTMF('%s')MBROPT(*REPLACE)STMFCCSID(*STMF)RCDDLM(*CRLF)DTAFMT(*DLM)STRDLM(*NONE)"%(lib,file,mem,ifspath)
printlib,file,mem,"->",ifspath
returnself.GetCmdMsg(str)
defIfsToFile(self,ifspath,lib,file,mem):
str="CPYFRMIMPFFROMSTMF('%s')TOFILE(%s/%s%s)MBROPT(*REPLACE)RCDDLM(*CRLF)STRDLM(*NONE)FLDDLM(',')ERRRCDOPT(*REPLACE)RPLNULLVAL(*FLDDFT)"%(ifspath,lib,file,mem)
printifspath,"->",lib,file,mem
returnself.GetCmdMsg(str)
defFileToPc(self,lib,file,mem,ofile):
tmpifs="QDLS/TEMP/%s.CSV"%mem
self.FileToIfs(lib,file,mem,tmpifs)
self.FtpGetIfsFile(tmpifs,ofile)
defPcToFile(self,ifile,lib,file,mem):
tmpifs="QDLS/TEMP/%s.CSV"%mem
self.FtpPutIfsFile(ifile,tmpifs)
self.IfsToFile(tmpifs,lib,file,mem)
defFtpGetIfsFile(self,ifspath,ofile):
ftp=self.AS400FTP(self.system)
successfully=ftp.get(ifspath,ofile)
printifspath,"->",ofile
returnsuccessfully
defFtpGetText(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)
ifos.path.isdir(dest):
dest=os.path.join(dest,mem+".txt")
printtarget,"->",dest
successfully=ftp.get(target,dest)
returnsuccessfully
defFtpGetSavf(self,lib,savf,dest=r"d:\temp"):
ftp=self.AS400FTP(self.system)
target="/QSYS.LIB/%s.LIB/%s.SAVF"%(lib,savf)
#QUOTESITENAMEFMT0QGPL/QCLSRC.TEST
#QUOTESITENAMEFMT1/QSYS.lib/Libname.lib/Fname.file/Mname.mbr
ftp.issueCommand("quotesitenamefmt1")
ifos.path.isdir(dest):
dest=os.path.join(dest,savf+".SAVF")
#cannotgetitifnotsetdatatransfertype
ftp.setDataTransferType(1)
successfully=ftp.get(target,dest)
returnsuccessfully
defFtpPutIfsFile(self,ifile,ifspath):
ftp=self.AS400FTP(self.system)
successfully=ftp.put(ifile,ifspath)
printifile,"->",ifspath
returnsuccessfully
defFtpPutText(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)
printifile,"->",lib,srcf,mem
returnsuccessfully
defGetOutQList(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,FileNumber:%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("FilePages:%s,Printquality:%s,Printerdevicetype:%s,Pagesizelength:%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"totalspoolfiles:",i
printinfo
defGetSpoolFile(self,sflib,sffile,sfname,sfjobnum,fnum,dest):
ifself.CheckObjExists(sflib,sffile)<>"":
#IGCDTAparameterisforDBCSfile
self.GetCmdMsg("CRTPFFILE(%s/%s)RCDLEN(160)IGCDTA(*YES)"%(sflib,sffile))
str="CPYSPLFFILE(%s)TOFILE(%s/%s)JOB(%s)SPLNBR(%d)"%(sfname,sflib,sffile,sfjobnum,fnum)
msg=self.GetCmdMsg(str)
ifmsg=="":
self.FtpGetText(sflib,sffile,sffile,dest)
print"downloadsuccessfully!"
defPutMsg(self,qlib,qname,msg):qstr="/QSYS.LIB/%s.LIB/%s.DTAQ"%(qlib,qname)dataqueue=self.DataQueue(self.system,qstr)dataqueue.write(msg)defGetMsg(self,qlib,qname):qstr="/QSYS.LIB/%s.LIB/%s.DTAQ"%(qlib,qname)dataqueue=self.DataQueue(self.system,qstr)dqdata=dataqueue.read()dqdatastr='Nodata'ifdqdata<>None:dqdatastr=dqdata.getString()printdqdatastrreturndqdatastr
if__name__=='__main__':
pass
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。