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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。