Java 通过processbuilder运行脚本

Java 通过processbuilder运行脚本,java,scripting,processbuilder,Java,Scripting,Processbuilder,我试图从一个java程序运行Python、露比、C++、java脚本,Processbuilder建议我作为一个运行脚本的好方法。据我所知,Processbuilder主要运行本机文件(.exe,windows等)。但是,我听说过一些关于使用Processbuilder运行脚本(非本机)文件的事情。不幸的是,我在这个问题上发现的一切都非常模糊 如果有人能澄清运行Python、Ruby等非本机脚本的方法,我将不胜感激 您可以检查,但基本上,您可以运行脚本语言的解释器,并将要运行的脚本传递给解释器

我试图从一个java程序运行Python、露比、C++、java脚本,Processbuilder建议我作为一个运行脚本的好方法。据我所知,Processbuilder主要运行本机文件(.exe,windows等)。但是,我听说过一些关于使用Processbuilder运行脚本(非本机)文件的事情。不幸的是,我在这个问题上发现的一切都非常模糊

如果有人能澄清运行Python、Ruby等非本机脚本的方法,我将不胜感激

您可以检查,但基本上,您可以运行脚本语言的解释器,并将要运行的脚本传递给解释器

例如,假设您在
/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();
    }
}
这是一个非常基本的例子,您可以通过更改工作目录和更改环境来获得更丰富的知识

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

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

为了避免手动输入脚本的整个位置(这也可能导致可移植性问题),我做了以下几点:

String pwd = System.getProperty("user.dir");

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