【问题标题】:Runtime.exec() issues with java when attempting to execute scripts, but certain commands work尝试执行脚本时 java 出现 Runtime.exec() 问题,但某些命令有效
【发布时间】: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


【解决方案1】:

我猜你必须等待脚本执行结束。

    try {
        Process process = Runtime.getRuntime().exec("/usr/bin/python print.py");
        process.waitFor();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

您可以尝试从进程中读取 exitCode ;-)

【讨论】:

  • 我尝试执行它,但它什么也没做,什么也没显示,没有抛出异常,只是没有执行它应该执行的操作。
  • 所以问题可能真的是在执行它自己所以正如迈克尔所说,你应该阅读 InputStream,以获取通常打印到控制台的信息。凭据、环境变量等可能存在问题。
  • 我正在读取进程对象输入流,但它仍然没有显示任何内容。不知道怎么回事
【解决方案2】:

好的,我最终通过使用获得了成功

process p = Runtime.getRuntime().exec("./pyshellthing.sh");
p.waitFor();

shell 脚本只是执行 python 脚本。

【讨论】:

    猜你喜欢
    • 2021-05-17
    • 2016-12-21
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    相关资源
    最近更新 更多