psexec在JVM中无法获取交互信息,高手进来看看。 本帖最后由 peng_hao1988 于 2012-11-14 09:52:24 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 String cmd = "cmd /c psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\";改为String cmd = "cmd /c start psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\"; 谢谢回复!这样弹出了MSDOS界面了,而且结果也没法直接获取到程序中吧,需要写入文件再读取文件中,不过看到希望了,非常感谢! String cmd = "cmd /c start psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\"; 这种挑中dos命令的语句最好不要写在一起,先打开界面,再慢慢append命令,这样不会出错。打开后输入psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\看能执行部,不行的话再修改 一步步来执行是可以,但是每一步都需要认为参与,这样在程序中不好操作呀!还有你刚刚的建议我试了,弹出了MSDOS界面,在界面中结果都出来了,但是无法获取到程序,也无法将结果写入文件,我使用这样修改命令的psexec \\10.67.192.212 -u china\liuxhwfe -p xxxxxx cmd /c dir D:\ > D:\rs.txt这个命令能产生rs.txt文件,但是文件内什么都没有。 没安装这个软件,不负责任的猜测几个可能:1、换行符解析差异,这个可以尝试换掉readLine()改成逐个字符读取(read())和原样输出;2、出现特殊错误信息了,这个要从 getErrorStream中读取,可以另外起一个独立线程来试试看;3、对方等待特定输入,也许默认应发送的比如回车之类的回显信息在JVM这种启动模式下就没了,需要用getOutputStream来尝试输出换行或回车。如果还不行,看有时间再装这个东西试试看。 好的,谢谢!1.这种情况很有可能,我下去试试看;2.错误信息我是用ErrorStream中获取的,我的命令都是在DOS下验证过的没问题的,在代码中也用ErrorStream测试过,没有错误信息,所以采用的InputStream。3.我的命令中不会有等待输入的情况,远程执行之后就会马上在控制台输出结果。 看来还是不行啊?其实我挺怀疑是需要对getInputStream()单纯输出一些 换行符的“\n”周末找时间试试看。 恩,谢谢!我使用psexec用指定的用户去执行本机的Clearcase命令访问clearcase服务器。当然这个不是问题的关键。使用方法和上面一样,主要是在 psexec 后面执行命令后DOS界面下可以看到交换信息,但是java程序中就不能获取信息了。 在使用运行bat文件时,程序不等待结束该如何处理??String runBat = "cmd /c start "+batPath; Process process = Runtime.getRuntime().exec(runBat); process.waitFor();//程序在这里不等待!!!! process.destroy(); Process proc = Runtime.getRuntime().exec("cmd /c tasklist | find \"psexec.exe\"",null,new File("C:\\WINDOWS\\system32")); BufferedReader rs = new BufferedReader(new InputStreamReader(proc.getInputStream(),"GBK")); String line = null; while((line = rs.readLine()) != null){ System.out.println(line); }这段代码在单独的java类中运行可以,但是放到JBOSS中运行就无法打印信息了。到底为什么? 总结一下经验,然后结贴!String cmd = "cmd /c start psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\";1.下面DOS命令可以执行,会弹出DOS界面,命令中的输出信息任然无法在java程序中获取,解决办法如下:String cmd = "cmd /c start psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\" >> D:\reuslt.txt将结果输出到文件,然后通过程序读取文件。2.单独的java类中运行可以,但是放到JBOSS中运行就无法打印信息的问题,是由于没有将环境变量添加到当前进程中(不知道为何JBOSS程序没有将path添加到进程中),解决方法如下:final String[] evn = new String[]{"Path=C:\\windows\\system32;C:\\windows\\;C:\\windows\\System32\\Wbem"};...........String line = null;do{ Process proc = Runtime.getRuntime().exec("cmd /c tasklist | find \"psexec.exe\"", evn); BufferedReader rs = new BufferedReader(new InputStreamReader(proc.getInputStream(),"GBK")); line = rs.readLine(); rs.close(); proc.destroy();} while(line != null);3.通过start方法运行的bat文件会单独启动一个进程,即java程序无法获知命令是否已经执行完成。我的解决办法如见2中的代码,就是不停的去查看bat中启动的进程psexec.exe如果该进程不存在了就代表命令已经执行完成。 ldh911 这位老兄抱歉,结贴的时候看错了,没把分给你,实在抱歉哈! 使用LinkedHashMap和Comparator排序器对Map的排序抛砖引玉 记事本的状态栏显示求助!!! SWT 中如何使Table可输入 java泛型的问题?请教高手??? 请问一下java中要对一个double数进行四舍五入要用那个类呀? 关于System.getProperty extends和 implements 各自的含义于区别是什么? 这倒底是怎么回事?(编译时) 快疯了,访问文件和数据库,帮帮我,散分了 在线等待,高分求救对话框的小问题 求一个java的视屏多媒体库 excel 数据库设计的问题 请大拿指点
改为
String cmd = "cmd /c start psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\";
这样弹出了MSDOS界面了,而且结果也没法直接获取到程序中吧,需要写入文件再读取文件中,不过看到希望了,非常感谢!
这种挑中dos命令的语句最好不要写在一起,先打开界面,再慢慢append命令,这样不会出错。
打开后输入psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\看能执行部,不行的话再修改
psexec \\10.67.192.212 -u china\liuxhwfe -p xxxxxx cmd /c dir D:\ > D:\rs.txt
这个命令能产生rs.txt文件,但是文件内什么都没有。
1、换行符解析差异,这个可以尝试换掉readLine()改成逐个字符读取(read())和原样输出;
2、出现特殊错误信息了,这个要从 getErrorStream中读取,可以另外起一个独立线程来试试看;
3、对方等待特定输入,也许默认应发送的比如回车之类的回显信息在JVM这种启动模式下就没了,需要用getOutputStream来尝试输出换行或回车。
如果还不行,看有时间再装这个东西试试看。
1.这种情况很有可能,我下去试试看;
2.错误信息我是用ErrorStream中获取的,我的命令都是在DOS下验证过的没问题的,在代码中也用ErrorStream测试过,没有错误信息,所以采用的InputStream。
3.我的命令中不会有等待输入的情况,远程执行之后就会马上在控制台输出结果。
其实我挺怀疑是需要对getInputStream()单纯输出一些 换行符的“\n”周末找时间试试看。
恩,谢谢!我使用psexec用指定的用户去执行本机的Clearcase命令访问clearcase服务器。当然这个不是问题的关键。使用方法和上面一样,主要是在 psexec 后面执行命令后DOS界面下可以看到交换信息,但是java程序中就不能获取信息了。
String runBat = "cmd /c start "+batPath;
Process process = Runtime.getRuntime().exec(runBat);
process.waitFor();//程序在这里不等待!!!!
process.destroy();
Process proc = Runtime.getRuntime().exec("cmd /c tasklist | find \"psexec.exe\"",null,new File("C:\\WINDOWS\\system32"));
BufferedReader rs = new BufferedReader(new InputStreamReader(proc.getInputStream(),"GBK"));
String line = null;
while((line = rs.readLine()) != null){
System.out.println(line);
}这段代码在单独的java类中运行可以,但是放到JBOSS中运行就无法打印信息了。到底为什么?
1.下面DOS命令可以执行,会弹出DOS界面,命令中的输出信息任然无法在java程序中获取,解决办法如下:
String cmd = "cmd /c start psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\" >> D:\reuslt.txt
将结果输出到文件,然后通过程序读取文件。2.单独的java类中运行可以,但是放到JBOSS中运行就无法打印信息的问题,是由于没有将环境变量添加到当前进程中(不知道为何JBOSS程序没有将path添加到进程中),解决方法如下:final String[] evn = new String[]{"Path=C:\\windows\\system32;C:\\windows\\;C:\\windows\\System32\\Wbem"};
...........
String line = null;
do{
Process proc = Runtime.getRuntime().exec("cmd /c tasklist | find \"psexec.exe\"", evn);
BufferedReader rs = new BufferedReader(new InputStreamReader(proc.getInputStream(),"GBK"));
line = rs.readLine();
rs.close();
proc.destroy();
} while(line != null);3.通过start方法运行的bat文件会单独启动一个进程,即java程序无法获知命令是否已经执行完成。我的解决办法如见2中的代码,就是不停的去查看bat中启动的进程psexec.exe如果该进程不存在了就代表命令已经执行完成。