<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調(diào)用shell,使用

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

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


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


        這個(gè)是因?yàn)镽untime.getRuntime().exec()要自己去處理stdout和stderr的輸出,
        就是說,執(zhí)行的結(jié)果不知道是現(xiàn)有錯(cuò)誤輸出(stderr),還是現(xiàn)有標(biāo)準(zhǔn)輸出(stdout)。
        你無法判斷到底那個(gè)先輸出,所以可能無法讀取輸出,而一直阻塞。
        例如:你先處理標(biāo)準(zhǔn)輸出(stdout),但是處理的結(jié)果是先有錯(cuò)誤輸出(stderr),
        一直在等錯(cuò)誤輸出(stderr)被取走了,才到標(biāo)準(zhǔn)輸出(stdout),這樣就產(chǎn)生了阻塞。

    解決辦法:


        用兩個(gè)線程將標(biāo)準(zhǔn)輸出(stdout)和錯(cuò)誤輸出(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) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    人人游戲網(wǎng) 軟件開發(fā)網(wǎng) 貨運(yùn)專家
    主站蜘蛛池模板: 亚洲第一区精品观看| 最近2019年免费中文字幕高清 | 久久精品亚洲综合一品| 一个人看www免费高清字幕| 亚洲国产一区二区三区| 日韩a毛片免费观看| 亚洲精品麻豆av| 国产高潮流白浆喷水免费A片 | 亚洲精品成人a在线观看| 一级毛片成人免费看a| 激情97综合亚洲色婷婷五| 一级毛片人与动免费观看| 亚洲精品乱码久久久久久蜜桃不卡 | 国产精品美女免费视频观看| 国产成人亚洲综合无码| 99在线免费视频| 无码专区—VA亚洲V天堂| 无码人妻精品中文字幕免费东京热| 亚洲精品在线视频观看| 免费在线观看的网站| 国产成人亚洲综合a∨| 亚洲伊人久久成综合人影院| 国产猛男猛女超爽免费视频| 亚洲精品无码久久毛片波多野吉衣| 1024免费福利永久观看网站| 亚洲hairy多毛pics大全| 亚洲精品视频免费| 久久久久久久岛国免费播放 | 91免费资源网站入口| 亚洲成熟丰满熟妇高潮XXXXX| 免费在线观看日韩| 久久久精品免费视频| 亚洲伊人久久大香线蕉结合| 国产一区二区视频免费| 国产免费AV片在线观看| 亚洲夂夂婷婷色拍WW47| 久久亚洲国产精品123区| 国产成人精品免费午夜app| 亚洲精品色在线网站| 亚洲国产精品自在线一区二区| 成年女人男人免费视频播放|