我有调用从运行时类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脚本它不产生输出大量,所以能够填充输出缓冲和阻挡之前终止。山猫命令据推测产生更多的输出,因此打这个问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top