中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JAVA如何調用Shell腳本

發布時間:2020-09-27 17:47:24 來源:腳本之家 閱讀:311 作者:sunshine_kaka 欄目:編程語言

在實際項目中,Java有時候需要調用C寫出來的東西,除了JNI以外,我認為一種比較好的方法是JAVA調用Shell。先把C寫出來的make成可執行文件,然后再寫一個shell腳本執行該可執行文件,最后是JAVA調用該shell腳本。

JAVA調用很簡單,例子如下:

首先是shell腳本

#!/bin/sh 
echo Begin word cluster 
/home/felven/word2vec/word2vec -train /home/felven/word2vec/resultbig.txt -output /home/felven/word2vec/classes.csv -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -classes 2000 
echo The word classes were saved to file classes.csv 

然后是JAVA調用代碼

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
 
public class RunShell { 
  public static void main(String[] args){ 
    try { 
      String shpath="/home/felven/word2vec/demo-classes.sh"; 
      Process ps = Runtime.getRuntime().exec(shpath); 
      ps.waitFor(); 
 
      BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream())); 
      StringBuffer sb = new StringBuffer(); 
      String line; 
      while ((line = brreadLine()) != null) { 
        sb.append(line).append("\n"); 
      } 
      String result = sbtoString(); 
      System.out.println(result); 
      }  
    catch (Exception e) { 
      e.printStackTrace(); 
      } 
  } 
} 

其實就是一個Process類進行調用,然后把shell的執行結果輸出到控制臺下。

需要注意的是,在調用時需要執行waitFor()函數,因為shell進程是JAVA進程的子進程,JAVA作為父進程需要等待子進程執行完畢。

另外在eclipse控制臺輸出時并不是邊執行邊輸出,而是shell全部執行完畢后輸出,所以如果執行較為復雜的shell腳本看到沒有輸出時可能會誤以為沒有執行,這個時候看看終端里面的進程,TOP命令一下就能看到其實shell腳本已經開始執行了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

徐汇区| 福贡县| 新津县| 澜沧| 建水县| 广汉市| 商洛市| 曲靖市| 营口市| 容城县| 广德县| 云安县| 原平市| 苍溪县| 红桥区| 阳信县| 连山| 额济纳旗| 石门县| 泌阳县| 吉木乃县| 陵川县| 磐石市| 江源县| 三明市| 伊春市| 大连市| 苏尼特右旗| 景东| 勐海县| 铜山县| 新巴尔虎左旗| 千阳县| 吉首市| 怀远县| 手机| 深圳市| 绥滨县| 仁布县| 卢湾区| 姚安县|