java 直接調(diào)用python腳本,并傳遞參數(shù)代碼實例
最近陸續(xù)用python寫了很多文件處理腳本,雖然功能都比較簡單 ,但還是感覺到python對文件處理的簡潔高效 ,越發(fā)覺得java的語法相當?shù)姆爆崀
接到個需求處理ftp數(shù)據(jù)接口 。所以想把python腳本也用上。java代碼定時掃描ftp數(shù)據(jù)倉庫 ,調(diào)用python腳本入庫。
直接采用java執(zhí)行系統(tǒng)命令的方式
@Async public void readFileByPython(List<String> filePaths) throws FileNotFoundException { URL localSrcUrl = AbstractReadFileLine.class.getResource(""); String localSrcPath = localSrcUrl.getPath(); localSrcPath = localSrcPath.substring(1, localSrcPath.length()); String pythonFile = localSrcPath + "PythonFileHandle.py"; int size = filePaths.size() + 2; String[] args = new String[size]; args[0] = "python"; args[1] = pythonFile; for(int i =0;i<filePaths.size() ;i++){ int index = i+2; args[index] = filePaths.get(i); } try { System.out.println("start"); Process proc = Runtime.getRuntime().exec(args); InputStream is = proc.getErrorStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line = null; System.out.println("<ERROR>"); while((line = br.readLine())!=null){ System.out.println(line); System.out.println("</ERROR>"); int exitValue = proc.waitFor(); System.out.println("Process exitValue="+exitValue); } System.out.println("end"); } catch (Exception e){ e.printStackTrace(); } }
String[] args = new String[size];
args[0] = "python"; args[1] = pythonFile; args[0]表示要執(zhí)行的是python 腳本 ,args[1] 腳本文件的全路徑
該方法調(diào)用 AbstractReadFileLine.class 文件路徑下的 PythonFileHandle.py 腳本 ,并傳入String數(shù)組類型的參數(shù)(需要處理的文件全路徑)
PythonFileHandle腳本接受java傳入的文件路徑參數(shù)(數(shù)組),解析并入庫
PythonFileHandle.py 代碼
import pymssql,time,sys reload(sys) sys.setdefaultencoding("utf-8") class MSSQL: def __init__(self,host,user,pwd,db): self.host = host self.user = user self.pwd = pwd self.db = db def __GetConnect(self): if not self.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() if not cur: raise(NameError,"") else: return cur def ExecQuery(self,sql): cur = self.__GetConnect() cur.execute(sql) resList = cur.fetchall() # self.conn.close() return resList def ExecNonQuery(self,sql): cur = self.__GetConnect() cur.execute(sql) self.conn.commit() self.conn.close() def insertToCloseList(data ,ms): sql = "insert into t_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 = '$%$' for i in range(1, len(sys.argv)): read = open(sys.argv[i] ,'r') for line in read: line=line.strip('\n') data = line.split(fengefu) insertToCloseList(data,ms) read.close
sys.argv[0] 存儲的是py文件自身的路徑,故接受參數(shù)從sys.argv[1]開始。
以上所述是小編給大家介紹的java調(diào)用python腳本傳遞參數(shù)詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
又又叕出BUG啦!理智分析Java NIO的ByteBuffer到底有多難用
網(wǎng)絡數(shù)據(jù)的基本單位永遠是byte,Java NIO提供ByteBuffer作為字節(jié)的容器,但該類過于復雜,有點難用.本篇文章就帶大家簡單了解一下 ,需要的朋友可以參考下2021-06-06springboot使用filter獲取自定義請求頭的實現(xiàn)代碼
這篇文章主要介紹了springboot使用filter獲取自定義請求頭的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05Mybatis 實現(xiàn)動態(tài)組裝查詢條件,仿SQL模式
這篇文章主要介紹了Mybatis 實現(xiàn)動態(tài)組裝查詢條件,仿SQL模式的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06java中多個@Scheduled定時器不執(zhí)行的解決方法
在應用開發(fā)中經(jīng)常需要一些周期性的操作,比如每5分鐘執(zhí)行某一操作等,這篇文章主要給大家介紹了關(guān)于java中多個@Scheduled定時器不執(zhí)行的解決方法,需要的朋友可以參考下2023-04-04SpringCloud Gateway實現(xiàn)限流功能詳解
SpringCloud Gateway 是 Spring Cloud 的一個全新項目,它旨在為微服務架構(gòu)提供一種簡單有效的統(tǒng)一的 API 路由管理方式。這篇文章主要介紹了SpringCloud Gateway實現(xiàn)限流,需要的朋友可以參考下2022-11-11Java?通過手寫分布式雪花SnowFlake生成ID方法詳解
SnowFlake是twitter公司內(nèi)部分布式項目采用的ID生成算法,開源后廣受國內(nèi)大廠的好評。由這種算法生成的ID,我們就叫做SnowFlakeID,下面我們來詳細看看2022-04-04JAVA中通過Redis實現(xiàn)延時任務demo實例
Redis在2.0版本時引入了發(fā)布訂閱(pub/sub)功能,在發(fā)布訂閱中有一個channel(頻道),與消息隊列中的topic(主題)類似,可以通過redis的發(fā)布訂閱者模式實現(xiàn)延時任務功能,實例中會議室預約系統(tǒng),用戶預約管理員審核后生效,如未審批,需要自動變超期未處理,使用延時任務2024-08-08