gpt4 book ai didi

java - 从jsp脚本调用lynx

转载 作者:行者123 更新时间:2023-12-01 16:04:46 26 4
gpt4 key购买 nike

我在 jsp 脚本中有一个execute(String cmd),它从 Runtime 类调用 exec 方法。

当我调用本地命令(例如存储在服务器上的 php 脚本)时它会起作用。例如:/usr/bin/php/path/to/php/script arg1 arg2

所以我想我的执行命令没问题,因为它正在使用它。

现在,当我尝试调用 lynx(基于文本的 Web 浏览器)时,它不起作用。

如果我在终端中调用它,它工作正常:/usr/bin/lynx -dump -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;

}

最佳答案

您需要从Process'输出流中读取。

既然你不是,底层的 lynx 进程可能在写入输出时阻塞,等待有人清空输出流的缓冲区。 即使您要忽略输出,您仍然需要读取它,以便流程按照您的预期执行

作为javadocs of Process例如,“由于某些原生平台只为标准输入输出流提供有限的缓冲区大小,因此未能及时写入子进程的输入流或读取子进程的输出流可能会导致子进程阻塞,甚至死锁。”

参见http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html有关如何处理此问题的一些示例。

编辑:如果您想知道,很可能当您调用 PHP 脚本时,它没有产生大量输出,因此能够在填充输出缓冲区和阻塞之前终止。 lynx 命令可能会产生更多输出,因此会遇到此问题。

关于java - 从jsp脚本调用lynx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2856635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com