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 FTP操作类代码分享
May 13 Python
python统计文本文件内单词数量的方法
May 30 Python
python简单分割文件的方法
Jul 30 Python
利用Python自动监控网站并发送邮件告警的方法
Aug 24 Python
python实现批量图片格式转换
Jun 16 Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 Python
学习python可以干什么
Feb 26 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
Feb 14 Python
Python使用os.listdir和os.walk获取文件路径
May 21 Python
python基于socket函数实现端口扫描
May 28 Python
Python 可视化神器Plotly详解
Dec 26 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
什么情况下可以不写PHP的闭合标签“?&gt;”
2014/08/28 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
jqPlot 基于jquery的画图插件
2011/04/26 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
JQuery获取与设置HTML元素的内容或文本的实现代码
2014/06/20 Javascript
jQuery实现防止提交按钮被双击的方法
2015/03/24 Javascript
浅谈javascript的Array.prototype.slice.call
2015/08/31 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
多种jQuery绑定事件的实现方式
2016/06/13 Javascript
EasyUI Pagination 分页的两种做法小结
2016/07/09 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
Angular 2父子组件之间共享服务通信的实现
2017/07/04 Javascript
html中通过JS获取JSON数据并加载的方法
2017/11/30 Javascript
vue基于viewer实现的图片查看器功能
2019/04/12 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
2020/07/20 Javascript
js实现右键弹出自定义菜单
2020/09/08 Javascript
JavaScript十大取整方法实例教程
2020/12/03 Javascript
[03:24]DOTA2超级联赛专访hao 大翻盘就是逆袭
2013/05/24 DOTA
[10:21]2018DOTA2国际邀请赛寻真——Winstrike
2018/08/11 DOTA
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
用Python制作在地图上模拟瘟疫扩散的Gif图
2015/03/31 Python
Python enumerate索引迭代代码解析
2018/01/19 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
PHP统计代码行数的小代码
2019/09/19 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
村官学习十八大感想
2014/01/15 职场文书
留学推荐信范文
2014/05/10 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
未中标通知书
2015/04/17 职场文书
React四级菜单的实现
2022/04/08 Javascript