日期:2014-05-20  浏览次数:20857 次

Linux执行命令的问题
我用java写了一个程序去plink到其他的linux机子上面去执行脚本,

就是这样一条命令

plink -ssh 192.168.1.120 -l test -pw test -m /usr/local/tomcat6/webapps/fort/uploadScript/20110906172533.txt


我手动执行是可以的但是我使用java程序


Process process=Runtime.getRuntime().exec("plink -ssh 192.168.1.120 -l test -pw test -m /usr/local/tomcat6/webapps/fort/uploadScript/20110906172533.txt");

BufferedReader new BufferedReader(new InputStreamReader(process.getInputStream()));
while (br.readLine() != null) {
  System.out.println(br.readLine());//这个样子打印执行结果返回的值
}

没有任何的返回结果输出。请高手指点一下!谢谢!



------解决方案--------------------
LZ没看我的回复?
Process process=Runtime.getRuntime().exec 只是会开一个子进程,但是进程被执行了没有,执行结束了没有,是随机的,所以应该是主线程等待process执行结束(否则process还没执行,主线程自己就先结束了),用另外一个一般线程去打印process的信息,因为是一般线程(非守护线程),所以就算主程序结束了,线程也还可以执行。
不知道LZ能不能明白?

------解决方案--------------------
have a try
Java code
final Process process=Runtime.getRuntime().exec("plink -ssh 192.168.1.120 -l test -pw test -m /usr/local/tomcat6/webapps/fort/uploadScript/20110906172533.txt");

Thread t = new Thread() { //启动一个线程来打印
    public void run() {
        try {
            sleep(1000);
            BufferedReader new BufferedReader(new InputStreamReader(process.getInputStream()));
            while (br.readLine() != null) {
                System.out.println(br.readLine());
              }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
t.start();
process.waitFor(); //这个不要也可以