java 直接調(diào)用python腳本,并傳遞參數(shù)代碼實(shí)例
最近陸續(xù)用python寫(xiě)了很多文件處理腳本,雖然功能都比較簡(jiǎn)單 ,但還是感覺(jué)到python對(duì)文件處理的簡(jiǎn)潔高效 ,越發(fā)覺(jué)得java的語(yǔ)法相當(dāng)?shù)姆爆崀
接到個(gè)需求處理ftp數(shù)據(jù)接口 。所以想把python腳本也用上。java代碼定時(shí)掃描ftp數(shù)據(jù)倉(cāng)庫(kù) ,調(diào)用python腳本入庫(kù)。
直接采用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ù)組類(lèi)型的參數(shù)(需要處理的文件全路徑)
PythonFileHandle腳本接受java傳入的文件路徑參數(shù)(數(shù)組),解析并入庫(kù)
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] 存儲(chǔ)的是py文件自身的路徑,故接受參數(shù)從sys.argv[1]開(kāi)始。
以上所述是小編給大家介紹的java調(diào)用python腳本傳遞參數(shù)詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
又又叕出BUG啦!理智分析Java NIO的ByteBuffer到底有多難用
網(wǎng)絡(luò)數(shù)據(jù)的基本單位永遠(yuǎn)是byte,Java NIO提供ByteBuffer作為字節(jié)的容器,但該類(lèi)過(guò)于復(fù)雜,有點(diǎn)難用.本篇文章就帶大家簡(jiǎn)單了解一下 ,需要的朋友可以參考下2021-06-06
普通對(duì)象使用spring容器中的對(duì)象的實(shí)現(xiàn)方法
這篇文章主要介紹了普通對(duì)象使用spring容器中的對(duì)象的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
springboot使用filter獲取自定義請(qǐng)求頭的實(shí)現(xiàn)代碼
這篇文章主要介紹了springboot使用filter獲取自定義請(qǐng)求頭的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05
Mybatis 實(shí)現(xiàn)動(dòng)態(tài)組裝查詢條件,仿SQL模式
這篇文章主要介紹了Mybatis 實(shí)現(xiàn)動(dòng)態(tài)組裝查詢條件,仿SQL模式的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
java中多個(gè)@Scheduled定時(shí)器不執(zhí)行的解決方法
在應(yīng)用開(kāi)發(fā)中經(jīng)常需要一些周期性的操作,比如每5分鐘執(zhí)行某一操作等,這篇文章主要給大家介紹了關(guān)于java中多個(gè)@Scheduled定時(shí)器不執(zhí)行的解決方法,需要的朋友可以參考下2023-04-04
SpringCloud Gateway實(shí)現(xiàn)限流功能詳解
SpringCloud Gateway 是 Spring Cloud 的一個(gè)全新項(xiàng)目,它旨在為微服務(wù)架構(gòu)提供一種簡(jiǎn)單有效的統(tǒng)一的 API 路由管理方式。這篇文章主要介紹了SpringCloud Gateway實(shí)現(xiàn)限流,需要的朋友可以參考下2022-11-11
Java?通過(guò)手寫(xiě)分布式雪花SnowFlake生成ID方法詳解
SnowFlake是twitter公司內(nèi)部分布式項(xiàng)目采用的ID生成算法,開(kāi)源后廣受?chē)?guó)內(nèi)大廠的好評(píng)。由這種算法生成的ID,我們就叫做SnowFlakeID,下面我們來(lái)詳細(xì)看看2022-04-04
JAVA中通過(guò)Redis實(shí)現(xiàn)延時(shí)任務(wù)demo實(shí)例
Redis在2.0版本時(shí)引入了發(fā)布訂閱(pub/sub)功能,在發(fā)布訂閱中有一個(gè)channel(頻道),與消息隊(duì)列中的topic(主題)類(lèi)似,可以通過(guò)redis的發(fā)布訂閱者模式實(shí)現(xiàn)延時(shí)任務(wù)功能,實(shí)例中會(huì)議室預(yù)約系統(tǒng),用戶預(yù)約管理員審核后生效,如未審批,需要自動(dòng)變超期未處理,使用延時(shí)任務(wù)2024-08-08

