python如何使用jt400.jar包代码实例


Posted in Python onDecember 20, 2019

这篇文章主要介绍了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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
讲解Python中的递归函数
Apr 27 Python
python编程实现随机生成多个椭圆实例代码
Jan 03 Python
python+numpy+matplotalib实现梯度下降法
Aug 31 Python
Python中函数参数匹配模型详解
Jun 09 Python
python实现自动化上线脚本的示例
Jul 01 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
Django 重写用户模型的实现
Jul 29 Python
Python 音频生成器的实现示例
Dec 24 Python
PyCharm第一次安装及使用教程
Jan 08 Python
python对数组进行排序,并输出排序后对应的索引值方式
Feb 28 Python
python构造IP报文实例
May 05 Python
解决jupyter notebook启动后没有token的坑
Apr 24 Python
基于python使用tibco ems代码实例
Dec 20 #Python
使用python实现数组、链表、队列、栈的方法
Dec 20 #Python
python隐藏类中属性的3种实现方法
Dec 19 #Python
Python合并2个字典成1个新字典的方法(9种)
Dec 19 #Python
关于Python中定制类的比较运算实例
Dec 19 #Python
在python中利用try..except来代替if..else的用法
Dec 19 #Python
Python字符串的修改方法实例
Dec 19 #Python
You might like
56.com视频采集接口程序(PHP)
2007/09/22 PHP
PHP的博客ping服务代码
2012/02/04 PHP
php的一个简单加密解密代码
2014/01/14 PHP
PHP中把有符号整型转换为无符号整型方法
2015/05/27 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
thinkPHP5框架导出Excel文件简单操作示例
2018/08/03 PHP
PHP中检查isset()和!empty()函数的必要性
2019/02/13 PHP
解决AJAX中跨域访问出现'没有权限'的错误
2008/08/20 Javascript
JS 无限级 Select效果实现代码(json格式)
2011/08/30 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
JavaScript插件化开发教程 (四)
2015/01/27 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
解决vuejs项目里css引用背景图片不能显示的问题
2018/09/13 Javascript
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
python pandas dataframe 行列选择,切片操作方法
2018/04/10 Python
Python 把序列转换为元组的函数tuple方法
2019/06/27 Python
Python 画出来六维图
2019/07/26 Python
python3的数据类型及数据类型转换实例详解
2019/08/20 Python
Python中random模块常用方法的使用教程
2020/10/04 Python
英国领先的运动营养品牌:Protein Dynamix
2018/01/02 全球购物
Nike澳大利亚官网:Nike.com (AU)
2019/06/03 全球购物
初中三年学生的学习自我评价
2013/11/13 职场文书
师范应届毕业生自荐信
2013/11/18 职场文书
领导失职检讨书
2014/02/24 职场文书
音乐教师求职信
2014/06/28 职场文书
校园运动会广播稿
2014/10/06 职场文书
质量保证书格式模板
2015/02/27 职场文书
招商银行收入证明
2015/06/17 职场文书
学前教育见习总结
2015/06/23 职场文书
Java tomcat手动配置servlet详解
2021/11/27 Java/Android