电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

如何使用JAVA調(diào)用SHELL

瀏覽:3日期:2022-08-30 10:49:56

通過ProcessBuilder進行調(diào)度

這種方法比較直觀,而且參數(shù)的設(shè)置也比較方便, 比如我在實踐中的代碼(我隱藏了部分業(yè)務(wù)代碼):

ProcessBuilder pb = new ProcessBuilder('./' + RUNNING_SHELL_FILE, param1,param2, param3); pb.directory(new File(SHELL_FILE_DIR)); int runningStatus = 0; String s = null; try { Process p = pb.start(); try {runningStatus = p.waitFor(); } catch (InterruptedException e) { } } catch (IOException e) { } if (runningStatus != 0) { } return;

這里有必要解釋一下幾個參數(shù):

RUNNING_SHELL_FILE:要運行的腳本SHELL_FILE_DIR:要運行的腳本所在的目錄; 當(dāng)然你也可以把要運行的腳本寫成全路徑。runningStatus:運行狀態(tài),0標(biāo)識正常。 詳細(xì)可以看java文檔。param1, param2, param3:可以在RUNNING_SHELL_FILE腳本中直接通過1,2,$3分別拿到的參數(shù)。

直接通過系統(tǒng)Runtime執(zhí)行shell

這個方法比較暴力,也比較常用, 代碼如下:

p = Runtime.getRuntime().exec(SHELL_FILE_DIR + RUNNING_SHELL_FILE + ' '+param1+' '+param2+' '+param3);p.waitFor();

我們發(fā)現(xiàn),通過Runtime的方式并沒有builder那么方便,特別是參數(shù)方面,必須自己加空格分開,因為exec會把整個字符串作為shell運行。

可能存在的問題以及解決方法

如果你覺得通過上面就能滿足你的需求,那么可能是要碰壁了。你會遇到以下情況。

沒權(quán)限運行

這個情況我們團隊的朱東方就遇到了, 在做DTS遷移的過程中,要執(zhí)行包里面的shell腳本, 解壓出來了之后,發(fā)現(xiàn)執(zhí)行不了。 那么就按照上面的方法授權(quán)吧

ProcessBuilder builder = new ProcessBuilder('/bin/chmod', '755', tempFile.getPath()); Process process = builder.start(); int rc = process.waitFor();

java進行一直等待shell返回

這個問題估計更加經(jīng)常遇到。 原因是, shell腳本中有echo或者print輸出, 導(dǎo)致緩沖區(qū)被用完了! 為了避免這種情況, 一定要把緩沖區(qū)讀一下, 好處就是,可以對shell的具體運行狀態(tài)進行l(wèi)og出來。 比如上面我的例子中我會變成:

ProcessBuilder pb = new ProcessBuilder('./' + RUNNING_SHELL_FILE, keyword.trim(),taskId.toString(), fileName); pb.directory(new File(CASPERJS_FILE_DIR)); int runningStatus = 0; String s = null; try { Process p = pb.start(); BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); while ((s = stdInput.readLine()) != null) {LOG.error(s); } while ((s = stdError.readLine()) != null) {LOG.error(s); } try {runningStatus = p.waitFor(); } catch (InterruptedException e) { }

記得在start()之后, waitFor()之前把緩沖區(qū)讀出來打log, 就可以看到你的shell為什么會沒有按照預(yù)期運行。 這個還有一個好處是,可以讀shell里面輸出的結(jié)果, 方便java代碼進一步操作。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 荣事达手推洗地机_洗地机厂家_驾驶式扫地机_工业清洁设备 | 珠海冷却塔降噪维修_冷却塔改造报价_凉水塔风机维修厂家- 广东康明节能空调有限公司 | 杭州代理记账费用-公司注销需要多久-公司变更监事_杭州福道财务管理咨询有限公司 | 分子蒸馏设备(短程分子蒸馏装置)_上海达丰仪器 | 小青瓦丨古建筑瓦丨青瓦厂家-宜兴市徽派古典建筑材料有限公司 | 医疗仪器模块 健康一体机 多参数监护仪 智慧医疗仪器方案定制 血氧监护 心电监护 -朗锐慧康 | 石家庄装修设计_室内家装设计_别墅装饰装修公司-石家庄金舍装饰官网 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | PCB接线端子_栅板式端子_线路板连接器_端子排生产厂家-置恒电气 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 假肢-假肢价格-假肢厂家-河南假肢-郑州市力康假肢矫形器有限公司 | 北京四合院出租,北京四合院出售,北京平房买卖 - 顺益兴四合院 | 骨灰存放架|骨灰盒寄存架|骨灰架厂家|智慧殡葬|公墓陵园管理系统|网上祭奠|告别厅智能化-厦门慈愿科技 | 成都网站建设制作_高端网站设计公司「做网站送优化推广」 | 北京浩云律师事务所-法律顾问_企业法务_律师顾问_公司顾问 | 搪玻璃冷凝器_厂家-越宏化工设备| 岩石钻裂机-液压凿岩机-劈裂机-挖改钻_湖南烈岩科技有限公司 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 宁波普瑞思邻苯二甲酸盐检测仪,ROHS2.0检测设备,ROHS2.0测试仪厂家 | 礼至家居-全屋定制家具_一站式全屋整装_免费量房设计报价 | 卧涛科技有限公司科技项目申报公司|高新技术企业申报|专利申请 | 电动百叶窗,开窗器,电动遮阳百叶,电动开窗机生产厂家-徐州鑫友工控科技发展有限公司 | 高压油管,液压接头,液压附件-烟台市正诚液压附件 | 一点车讯-汽车网站,每天一点最新车讯! | 医学模型生产厂家-显微手术模拟训练器-仿真手术模拟训练系统-北京医教科技 | TTCMS自助建站_网站建设_自助建站_免费网站_免费建站_天天向上旗下品牌 | 河南mpp电力管_mpp电力管生产厂家_mpp电力电缆保护管价格 - 河南晨翀实业 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 双菱电缆-广州电缆厂_广州电缆厂有限公司 | 阳光1号桔柚_无核沃柑_柑橘新品种枝条苗木批发 - 苧金网 | 全自动实验室洗瓶机,移液管|培养皿|进样瓶清洗机,清洗剂-广州摩特伟希尔机械设备有限责任公司 | 悬浮拼装地板_篮球场木地板翻新_运动木地板价格-上海越禾运动地板厂家 | 玉米深加工设备-玉米深加工机械-新型玉米工机械生产厂家-河南粮院机械制造有限公司 | 水平垂直燃烧试验仪-灼热丝试验仪-漏电起痕试验仪-针焰试验仪-塑料材料燃烧检测设备-IP防水试验机 | 混合气体腐蚀试验箱_盐雾/硫化氢/气体腐蚀试验箱厂家-北京中科博达 | 高低温万能试验机_拉力试验机_拉伸试验机-馥勒仪器科技(上海)有限公司 | 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 天空彩票天下彩,天空彩天空彩票免费资料,天空彩票与你同行开奖,天下彩正版资料大全 | 药品冷藏箱厂家_低温冰箱_洁净工作台-济南欧莱博电子商务有限公司官网 | 菲希尔X射线测厚仪-菲希尔库伦法测厚仪-无锡骏展仪器有限责任公司 | 低气压试验箱_高低温低气压试验箱_低气压实验箱 |林频试验设备品牌 | 咖啡加盟,咖啡店加盟连锁品牌-卡小逗 |