【问题标题】:Cannot call perl script from Java无法从 Java 调用 perl 脚本
【发布时间】:2014-11-11 19:48:46
【问题描述】:

当我尝试从我的主 java 应用程序运行 perl 脚本时:

            try {
                ProcessBuilder pb = new ProcessBuilder(path+"\\script.pl");
                Process p = pb.start();     // Start the process.
                p.waitFor();                // Wait for the process to finish.
                System.out.println("Script executed successfully");
              } catch (Exception e) {
                e.printStackTrace();
                }

            }

我收到以下错误(不是有效的 win32 应用程序):

java.io.IOException:无法运行程序“C:\workspace\kepler\Alert_Handler\target\test-classes\script.pl”:CreateProcess 错误 = 193,%1 没有应用程序 Win32 válida 在 java.lang.ProcessBuilder.start(未知来源)

【问题讨论】:

标签: java perl


【解决方案1】:

Unix 使用 shebang 行来指示文件是可执行的,但 Windows 使用基于文件扩展名的不同机制。 Windows 认为可执行的文件扩展名是由PATHEXT 环境变量枚举的那些。您可以通过更改您的PATHEXT 变量来解决您的程序,如详细的here

或者,您可以使用perl 明确指定要启动脚本。

new ProcessBuilder("perl.exe", path+"\\script.pl");

- 池上

【讨论】:

    【解决方案2】:

    好的——我的母语不是西班牙语,而是这个

    no es una aplicación Win32 válida
    

    似乎翻译为“这不是一个有效的 Win32 应用程序”,因此在 Windows 下,您似乎必须明确地启动 Perl 解释器,并将脚本作为 arg。比如:

    new ProcessBuilder("perl.exe",path+"\\script.pl");
    

    可能吗?

    【讨论】: