java 直接调用python脚本,并传递参数代码实例
最近陆续用python写了很多文件处理脚本,虽然功能都比较简单,但还是感觉到python对文件处理的简洁高效,越发觉得java的语法相当的繁琐~
接到个需求处理ftp数据接口。所以想把python脚本也用上。java代码定时扫描ftp数据仓库,调用python脚本入库。
直接采用java执行系统命令的方式
@Async publicvoidreadFileByPython(ListfilePaths)throwsFileNotFoundException{ URLlocalSrcUrl=AbstractReadFileLine.class.getResource(""); StringlocalSrcPath=localSrcUrl.getPath(); localSrcPath=localSrcPath.substring(1,localSrcPath.length()); StringpythonFile=localSrcPath+"PythonFileHandle.py"; intsize=filePaths.size()+2; String[]args=newString[size]; args[0]="python"; args[1]=pythonFile; for(inti=0;i "); while((line=br.readLine())!=null){ System.out.println(line); System.out.println(""); intexitValue=proc.waitFor(); System.out.println("ProcessexitValue="+exitValue); } System.out.println("end"); }catch(Exceptione){ e.printStackTrace(); } }
String[]args=newString[size];
args[0]="python"; args[1]=pythonFile; args[0]表示要执行的是python脚本,args[1]脚本文件的全路径
该方法调用AbstractReadFileLine.class文件路径下的PythonFileHandle.py脚本,并传入String数组类型的参数(需要处理的文件全路径)
PythonFileHandle脚本接受java传入的文件路径参数(数组),解析并入库
PythonFileHandle.py代码
importpymssql,time,sys reload(sys) sys.setdefaultencoding("utf-8") classMSSQL: def__init__(self,host,user,pwd,db): self.host=host self.user=user self.pwd=pwd self.db=db def__GetConnect(self): ifnotself.db: raise(NameError,"") self.conn=pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset="utf8") cur=self.conn.cursor() ifnotcur: raise(NameError,"") else: returncur defExecQuery(self,sql): cur=self.__GetConnect() cur.execute(sql) resList=cur.fetchall() # self.conn.close() returnresList defExecNonQuery(self,sql): cur=self.__GetConnect() cur.execute(sql) self.conn.commit() self.conn.close() definsertToCloseList(data,ms): sql="insertintot_isee_closelist_infos(WORK_ORDER_ID,CRM_Cdsc_Id,APPRAISE_TYPE,CRM_Accept_Date,latn_code,theme_row_id,TASK_EXECUTE_ROW_ID,CRM_Accept_REASON,ASSET_INTEG_ID)values('" temp="','" sqlStr=temp.join(data) sql=sql+sqlStr+"')" ms.ExecNonQuery(sql) ms=MSSQL(host="172.30.0.186",user="sa",pwd="",db="test") fengefu='$%$' foriinrange(1,len(sys.argv)): read=open(sys.argv[i],'r') forlineinread: line=line.strip('\n') data=line.split(fengefu) insertToCloseList(data,ms) read.close
sys.argv[0]存储的是py文件自身的路径,故接受参数从sys.argv[1]开始。
以上所述是小编给大家介绍的java调用python脚本传递参数详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。