java 调用 powershell 的问题 在线等 急

希望对你有帮助 2015-08-04 12:09:57

1、首先我本地有一个test.ps1的powershell文件,内容为(只是为了输出传进来的参数):

For($i=0;$i -lt $args.Count; $i++)
{
Write-Host "parameter $i : $($args[$i])"
}

2、然后我的java代码如下:
private void exeCmd() {
InputStream in = null;
BufferedReader reader = null;
try {
String cmd = "cmd /c powershell D:/test.ps1 p1 p2";
Process p = Runtime.getRuntime().exec(cmd);
in = p.getInputStream();
reader = new BufferedReader(new InputStreamReader(in));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
System.out.println("out put end ---");
p.waitFor();
p.destroy();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

执行结果:
parameter 0 : p1
parameter 1 : p2

没有输出out put end ---,也就是说进程卡在 while里面了。后面所有内容都中断了。求大神帮忙。在下感激不尽。
...全文
222 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

我已经找到解决方案了:
Process p = Runtime.getRuntime().exec(cmd);
p.getOutputStream().close();//加上这句即可

董小姐_123 2015-08-04
  • 打赏
  • 举报
回复
你没有输出out put end--只能说明你前面的运行出现了问题,你再运行调试下,都没有问题的话。那我就无能为力了
  • 打赏
  • 举报
回复
引用 1 楼 dongwanli_csdn123 的回复:
我觉得关键需要看你reader.readLine()的值,否则你的循环就会变成一个死循环吧
兄台,当我用存dos命令的时候,是可以正常运行的, 比如: Process p = Runtime.getRuntime().exec("cmd.exe /c ipconfig /all");
董小姐_123 2015-08-04
  • 打赏
  • 举报
回复
我觉得关键需要看你reader.readLine()的值,否则你的循环就会变成一个死循环吧

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧