题
我有调用从运行时类exec方法一个jsp脚本的执行(字符串CMD)。
当我打电话本地命令,像存储在服务器上的PHP脚本。为例如:/ usr / bin中/ PHP /路径/到/ PHP /脚本的arg1 arg2的
所以,我想我的执行命令是好的,因为它正在与这一点。
现在,当我尝试调用猞猁,基于文本的网页浏览器,这是行不通的。
如果我把它在一个终端,它工作正常: 在/ usr / bin中/猞猁突降-accept_all_cookies“ http://www.someurl.net/ ?ARG1 = 1&ARG2 = 2 '
但是,当我把这个从我的执行命令,没有任何反应......
知道为什么?
这是我的执行方法,包括:
public String execute(String cmd){
Runtime r = Runtime.getRuntime();
Process p = null;
String res = "";
try {
p = r.exec(cmd);
InputStreamReader isr = new InputStreamReader(p.getInputStream());
BufferedReader br = new BufferedReader(isr);
String line = null;
//out.println(res);
while ((line = br.readLine()) != null) {
res += line;
}
p.waitFor();
} catch (Exception e) {
res += e;
}
System.out.println(p.exitValue());
return res;
}
解决方案 2
我解决它....通过调用山猫成PHP脚本,PHP脚本,我从JSP脚本调用...
这是一个低劣的解决方案,但至少它的工作......我还是不明白为什么从Java exec命令这样工作...
感谢您的帮助反正安杰(从名字..?^ _ ^捷克我猜的),不知为何,你把我的方式!
其他提示
您需要从Process
”输出流来阅读。
由于你没有,底层猞猁过程很可能在写输出,等着别人来清空输出流的缓冲区阻塞。 即使你要忽略输出,你总有需要读它的进程来执行如你所期望
AS过程的的javadocs 说,“因为一些本地平台仅提供用于标准输入和输出流有限的缓冲区大小,故障及时写输入流或读出的子过程的输出流可能会导致子进程块,甚至死锁。”
请参阅 HTTP://www.javaworld。 COM /和javaworld / JW-12-2000 / JW-1229-traps.html 获取的如何处理此的一些例子。
编辑:万一你想知道,机会是,当你调用PHP脚本它不产生输出大量,所以能够填充输出缓冲和阻挡之前终止。山猫命令据推测产生更多的输出,因此打这个问题。