我试图从java / tomcat6 webapp调用python脚本。我目前正在使用以下代码:
Process p = Runtime.getRuntime().exec("python <file.py>");
InputStream in = p.getInputStream();
InputStreamReader isr = new InputStreamReader(in);
BufferedReader b = new BufferedReader(isr);
logger.info("PYTHON OUTPUT");
String line = null;
while ( (line = b.readLine()) != null){
logger.info(line);
}
p.waitFor();
logger.info("COMPLETE PYTHON OUTPUT");
logger.info("EXIT VALUE: "+p.exitValue());
我无法在python脚本中看到catalinia.out文件中的任何输出,并且使用像jython这样的适配器库是不可能的,因为脚本依赖于需要python的Numpy模块才能工作的几个机器学习库。
帮助?
答案 0 :(得分:1)
解释可能是以下一个(或多个):
命令失败并将错误消息写入其“stderr”fd ...您没有看到它。
由于命令名称不正确,命令无法启动;例如它无法在$PATH
上找到。
该命令正在尝试从其stdin
fd读取...但您还没有提供任何输入。
这可能是命令行拆分的问题;例如,如果您使用的是带有嵌入空格的路径名,或者通常由shell处理的其他内容。
此外,由于这是python,这可能是特定于python的环境变量,当前目录和/或执行命令的有效用户的问题。
如何进行:
确定python命令是否实际启动。例如。 “hack”“”在启动时将某些内容写入临时文件。
更改为使用ProcessBuilder
创建Process
对象。这将使您更好地控制流以及如何处理它们。
找出子进程“stderr”的内容。 (ProcessBuilder允许您将其重定向到“stdout”...)