<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 241,  comments - 116,  trackbacks - 0

    用java調用shell,使用

    Process p=Runtime.getRuntime().exec(String[] cmd);

    Runtime.exec方法將產生一個本地的進程,并返回一個Process子類的實例,該實例可用于控制進程或取得進程的相關信息。
    由于調用Runtime.exec方法所創建的子進程沒有自己的終端或控制臺,因此該子進程的標準IO(如stdin,stdou,stderr)都通過
        p.getOutputStream(),
        p.getInputStream(),
        p.getErrorStream()
    方法重定向給它的父進程了.用戶需要用這些stream來向 子進程輸入數據或獲取子進程的輸出。
        
        例如:Runtime.getRuntime().exec("ls")


    另外需要關心的是Runtime.getRuntime().exec()中產生停滯(阻塞,blocking)的問題?


        這個是因為Runtime.getRuntime().exec()要自己去處理stdout和stderr的輸出,
        就是說,執行的結果不知道是現有錯誤輸出(stderr),還是現有標準輸出(stdout)。
        你無法判斷到底那個先輸出,所以可能無法讀取輸出,而一直阻塞。
        例如:你先處理標準輸出(stdout),但是處理的結果是先有錯誤輸出(stderr),
        一直在等錯誤輸出(stderr)被取走了,才到標準輸出(stdout),這樣就產生了阻塞。

    解決辦法:


        用兩個線程將標準輸出(stdout)和錯誤輸出(stderr)。

    import java.util.*;
    import java.io.*;
    class StreamGobbler extends Thread
    {
        InputStream is;
        String type;
        
        StreamGobbler(InputStream is, String type)
        {
            this.is = is;
            this.type = type;
        }
        
        public void run()
        {
            try
            {
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                String line=null;
                while ( (line = br.readLine()) != null)
                    System.out.println(type + ">" + line);    
                } catch (IOException ioe)
                  {
                    ioe.printStackTrace();  
                  }
        }
    }
    public class ExecRunner
    {
        public static void main(String args[])
        {
            if (args.length < 1)
            {
                System.out.println("USAGE: java GoodWindowsExec <cmd>");
                System.exit(1);
            }
            
            try
            {            
                String osName = System.getProperty("os.name" );
                String[] cmd = new String[3];
                if( osName.equals( "Windows NT" ) )
                {
                    cmd[0] = "cmd.exe" ;
                    cmd[1] = "/C" ;
                    cmd[2] = args[0];
                }
                else if( osName.equals( "Windows 95" ) )
                {
                    cmd[0] = "command.com" ;
                    cmd[1] = "/C" ;
                    cmd[2] = args[0];
                } else {
                    StringTokenizer st = new StringTokenizer(command, " ");
                    cmd = new String[st.countTokens()];
                    int token = 0;
                    while (st.hasMoreTokens()) {
                        String tokenString = st.nextToken();
                        // System.out.println(tokenString);
                        cmd[token++] = tokenString;
                    }
                }
                
                Runtime rt = Runtime.getRuntime();
                System.out.println("Execing " + cmd[0] + " " + cmd[1]
                                   + " " + cmd[2]);
                Process proc = rt.exec(cmd);
                // any error message?
                StreamGobbler errorGobbler = new
                    StreamGobbler(proc.getErrorStream(), "ERROR");            
                
                // any output?
                StreamGobbler outputGobbler = new
                    StreamGobbler(proc.getInputStream(), "OUTPUT");
                    
                // kick them off
                errorGobbler.start();
                outputGobbler.start();淘寶女裝夏裝新款
                                        
                // any error???
                int exitVal = proc.waitFor();
                System.out.println("ExitValue: " + exitVal);        
            } catch (Throwable t)
              {
                t.printStackTrace();
              }
        }
    }

    posted on 2011-05-16 16:04 墻頭草 閱讀(2646) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    人人游戲網 軟件開發網 貨運專家
    主站蜘蛛池模板: 2020年亚洲天天爽天天噜| 亚洲国产aⅴ成人精品无吗| 1024免费福利永久观看网站| 亚洲国产成人久久99精品| 国产网站在线免费观看| 好猛好深好爽好硬免费视频| 亚洲视频一区在线观看| 性做久久久久免费看| 国产在线精品观看免费观看| 亚洲国产午夜电影在线入口| 免费国产精品视频| 777爽死你无码免费看一二区| 国产精品亚洲精品久久精品 | 中文在线观看免费网站| 亚洲精品视频在线观看免费| 国产zzjjzzjj视频全免费 | 国产成人AV免费观看| 99久久婷婷国产综合亚洲| 亚洲中文字幕日产乱码高清app| 久久精品人成免费| 激情吃奶吻胸免费视频xxxx| 亚洲毛片基地日韩毛片基地| 亚洲精品岛国片在线观看| 国产无人区码卡二卡三卡免费 | 久久精品7亚洲午夜a| 热99re久久精品精品免费| 午夜爽爽爽男女免费观看影院| 一级毛片免费观看不卡视频| 国产精品观看在线亚洲人成网| 国产精品成人无码免费| 99国产精品免费视频观看| 2022国内精品免费福利视频 | 57pao国产成永久免费视频| 四虎国产精品永免费| 国产午夜亚洲精品国产| 亚洲福利视频导航| 亚洲免费观看视频| 亚洲国产一级在线观看 | 午夜高清免费在线观看| 亚洲国产成人无码AV在线影院| 亚洲一区二区在线免费观看|