最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年06月29日 09:12:32   作者:skyme  
這篇文章主要介紹了如何使用JAVA調(diào)用SHELL,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下

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

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

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:要運行的腳本所在的目錄; 當然你也可以把要運行的腳本寫成全路徑。
runningStatus:運行狀態(tài),0標識正常。 詳細可以看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運行。

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

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

沒權限運行

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

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

java進行一直等待shell返回

這個問題估計更加經(jīng)常遇到。 原因是, shell腳本中有echo或者print輸出, 導致緩沖區(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為什么會沒有按照預期運行。 這個還有一個好處是,可以讀shell里面輸出的結果, 方便java代碼進一步操作。

相關文章

  • Springboot+devtools配置熱部署過程

    Springboot+devtools配置熱部署過程

    SpringBoot提供的spring-boot-devtools模塊可以實現(xiàn)應用的熱部署,極大提升開發(fā)效率,通過添加POM依賴、配置yml文件、使用IDE快捷鍵等步驟,可以無需手動重啟即可自動加載變更,這種方式不僅適用于靜態(tài)文件的自動加載,也適用于整個SpringBoot工程,是提高開發(fā)效率的有效手段
    2024-11-11
  • String轉(zhuǎn)JSONObject的兩種方式

    String轉(zhuǎn)JSONObject的兩種方式

    這篇文章主要介紹了String轉(zhuǎn)JSONObject,本文通過實例代碼給大家介紹兩種方式轉(zhuǎn)換,結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • JUC系列學習工具類CountDownLatch詳解

    JUC系列學習工具類CountDownLatch詳解

    這篇文章主要介紹了JUC系列學習工具類CountDownLatch詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可任意參考一下
    2022-08-08
  • Java 添加文本框到PPT幻燈片過程解析

    Java 添加文本框到PPT幻燈片過程解析

    這篇文章主要介紹了Java 添加文本框到PPT幻燈片過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Java實現(xiàn)簡單的RPC框架的示例代碼

    Java實現(xiàn)簡單的RPC框架的示例代碼

    本篇文章主要介紹了Java實現(xiàn)簡單的RPC框架的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Druid連接池未關閉導致內(nèi)存泄漏問題

    Druid連接池未關閉導致內(nèi)存泄漏問題

    這篇文章主要介紹了Druid連接池未關閉導致內(nèi)存泄漏問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 一些java二進制的相關基礎知識

    一些java二進制的相關基礎知識

    這篇文章主要介紹了一些java二進制的相關基礎知識,在Java語言中byte代表最小計量單位,byte由8位2進制數(shù)組成。,需要的朋友可以參考下
    2019-06-06
  • Java中的Excel框架使用詳解

    Java中的Excel框架使用詳解

    這篇文章主要介紹了Java中的Excel框架使用詳解,Java解析、生成Excel比較有名的框架有Apache poi、jxl,但他們都存在一個嚴重的問題就是非常的耗內(nèi)存,poi有一套SAX模式的API可以一定程度的解決一些內(nèi)存溢出的問題,需要的朋友可以參考下
    2023-11-11
  • Java多線程之readwritelock讀寫分離的實現(xiàn)代碼

    Java多線程之readwritelock讀寫分離的實現(xiàn)代碼

    這篇文章主要介紹了Java多線程之readwritelock讀寫分離的相關內(nèi)容,文中涉及具體實例代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • Java實戰(zhàn)之郵件的撰寫和發(fā)送

    Java實戰(zhàn)之郵件的撰寫和發(fā)送

    這篇文章主要為大家詳細介紹了通過Java代碼實現(xiàn)郵件的撰寫和發(fā)送功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,需要的小伙伴們可以學習一下
    2021-11-11

最新評論

景谷| 巴彦淖尔市| 临西县| 白沙| 嵊州市| 施秉县| 达拉特旗| 崇义县| 兴化市| 安福县| 南充市| 九龙坡区| 宜宾市| 江西省| 桃源县| 日喀则市| 海兴县| 通道| 吴堡县| 周至县| 平南县| 通化市| 兴海县| 安岳县| 文成县| 东港市| 从江县| 东海县| 旬阳县| 马鞍山市| 台南县| 宜宾市| 左云县| 蓝山县| 静乐县| 广元市| 乌鲁木齐市| 雅江县| 德惠市| 宜春市| 连平县|