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