【问题标题】:running scripts through processbuilder通过 processbuilder 运行脚本
【发布时间】:2011-01-10 15:35:00
【问题描述】:

我正在尝试从 java 程序运行 Python、Ruby、C、C++ 和 Java 脚本,并且向我建议 Processbuilder 作为运行脚本的好方法。据我了解,Processbuilder 主要运行本机文件(Windows 上的 .exe 等)。但是,我听说过一些关于使用 Processbuilder 运行脚本(非本地)文件的事情。不幸的是,我发现的关于这个主题的一切都非常模糊。

如果有人能阐明一种运行非本地脚本(如 Python、Ruby 等)的方法,我将不胜感激!

【问题讨论】:

    标签: java scripting processbuilder


    【解决方案1】:

    您可以查看ProcessBuilder documentation over at Sunoracle,但基本上,您可以运行脚本语言的解释器并将您要运行的脚本传递给它。

    例如,假设您在/home/myuser/py_script.py 中有一个脚本,而python/usr/bin/

    class ProcessRunner
    {
        public static void main(String [] args)
        {
            ProcessBuilder pb = new ProcessBuilder("/usr/bin/python", "/home/myuser/py_script.py");
            Process p = pb.start();
        }
    }
    

    一个非常基本的示例,您可以通过更改工作目录和更改环境来获得更多乐趣。

    您还可以使用String 数组或List<String> 的子类型构造ProcessBuilder。列表中的第一项应该是您要运行的程序/可执行文件,以下所有项都是程序的参数。

    String pbCommand[] = { "/usr/bin/python", "/home/myuser/py_script.py" };
    ProcessBuilder pb = new ProcessBuilder(pbCommand);
    Process p = pb.start();
    

    【讨论】:

      【解决方案2】:

      为避免不得不手动输入脚本的整个位置,这也可能导致可移植性问题,这是我所做的:

      String pwd = System.getProperty("user.dir");
      
      ProcessBuilder pb = new ProcessBuilder("/usr/bin/python", pwd+'/'+scriptName, arg1, arg2);
      Process p = pb.start();
      

      【讨论】: