【发布时间】:2017-12-07 13:40:01
【问题描述】:
我正在尝试让我的 java 程序使用
执行 python 脚本import java.lang.Runtime;
public class test
{
public static void main(String[] args)
{
try
{
System.out.println("testing");
Runtime.getRuntime().exec("/usr/bin/python print.py");
}catch(Exception e){System.out.println("not working");}
}
}
但是,终端上没有显示任何内容(print.py 简单打印“这正在运行”)。与此相反,当我使用
Runtime.getRuntime().exec("touch dog.txt");
创建了一个名为 dog.txt 的文件。
我也尝试过运行
Runtime.getRuntime()exec("./shellscript.sh");
这只是一个运行 touch 命令的脚本,也不起作用。
不太确定问题出在哪里,更有趣的是,昨天 java 程序按预期工作,在此期间我的计算机没有发生大的变化。有人对发生的事情有任何想法吗?
我没有收到任何错误。
【问题讨论】:
-
当调用
Runtime.exec()时,被调用进程不会将其输出流连接到调用Java 进程的控制台。您必须对返回的Process对象进行getInputStream()(是的,输出的输入流),并以某种方式将其与System.out连接起来(可能在单独的线程中运行自己的函数)。 -
@MichaelButscher 所以基本上我需要打印出 getInputStream()?
-
粗略地说是的。
-
@MichaelButscher 好的,我将运行时 exec 创建为 Process 对象 p,然后 InputStream in = process.getInputStream() 并尝试通过 in.read 和 for 循环打印其内容,但得到了什么都没有了:(
-
@MichaelButscher 好的,结合使用 process.waitFor() 和读取 inputput 流,我能够打印出一些东西。但是我不知道它在告诉我什么。它只是为每次读取 in 打印出“104、101、108、111”等。不知道发生了什么。
标签: java python runtime.exec