色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

如何使用JAVA調用SHELL

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

通過ProcessBuilder進行調度

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

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;

這里有必要解釋一下幾個參數:

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

直接通過系統Runtime執行shell

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

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

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

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

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

沒權限運行

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

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

java進行一直等待shell返回

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

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()之前把緩沖區讀出來打log, 就可以看到你的shell為什么會沒有按照預期運行。 這個還有一個好處是,可以讀shell里面輸出的結果, 方便java代碼進一步操作。

標簽: Java
相關文章:
主站蜘蛛池模板: 一级全黄视频 | 成年人在线免费观看网站 | 国产午夜精品理论片影院 | 国产亚洲精品一品区99热 | 狠狠综合久久久久综合小说网 | 天天亚洲| 欧美综合视频 | 另类女最新视频 | 欧美日韩亚洲综合在线一区二区 | 国产精品久久久久一区二区三区 | 免费大片黄手机在线观看 | 亚洲成年网站在线观看 | 另类专区另类专区亚洲 | 自拍视频网 | 国产在线观看xxxx免费 | 欧美日韩高清性色生活片 | 精品欧美一区二区三区在线观看 | 在线永久免费观看黄网站 | 国产欧美日本在线观看 | 国产精品九九九久久九九 | 亚洲综色| 午夜免费的国产片在线观看 | 国语精品视频在线观看不卡 | 亚洲精品久久一区二区无卡 | 久草在线视频看看 | 成在线人永久免费播放视频 | 欧美大狠狠大臿蕉香蕉大视频 | 久久免费福利 | 福利视频午夜 | 国产精品免费观看视频 | 日韩中文字幕在线亚洲一区 | 国产国语一级毛片全部 | 国产精品成久久久久三级 | 免费国产一级 | 亚洲国产成人va在线观看网址 | 国产不卡a | 欧洲美女与男人做爰 | 亚洲精品国产第一区第二区国 | 久久久成人啪啪免费网站 | 欧美大尺度免费一级特黄 | 久草资源在线播放 |