java - 无法看到从 Java 类执行的 Perl 输出

标签 java linux perl unix

我正在使用 Java 类在 Linux 机器上执行 Perl 脚本。 .class 正在成功创建。 但是当我执行该类时,它显示 exit code successful as sop,但我无法看到 Perl 输出或脚本的执行。如果我直接执行 Perl,它工作正常...

这是 Perl 脚本:

#!/usr/local/bin/perl

print ("Enter the distance to be converted:\n"); 
$originaldist = <STDIN>;
chop ($originaldist);
$miles = $originaldist * 0.6214;
$kilometers = $originaldist * 1.609;
print ($originaldist, " kilometers = ", $miles,   " miles\n");

这是我调用脚本的 Java 类:

import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;

class test {
    public static void main(String[] args) throws IOException {
        String[] aCmdArgs = { "perl", "-e"
                  , "pl newprg.pl" };
        Runtime oRuntime = Runtime.getRuntime();
        Process oProcess = null;
        try {
            oProcess = oRuntime.exec(aCmdArgs);
            oProcess.waitFor();
        } catch (Exception e) {
            System.out.println("error executing " + aCmdArgs[0]);
        }
        /* dump output stream */
        BufferedReader is = new BufferedReader
            ( new InputStreamReader(oProcess.getInputStream()));
        String sLine;
        while ((sLine = is.readLine()) != null) {
            System.out.println(sLine);
        }
        System.out.flush();
        /* print final result of process */
        System.err.println("Exit status=" + oProcess.exitValue());
        return;
    }
}

最佳答案

两个问题:

  • perl -e pl newprg.pl 实际上不会从命令行执行您的程序,因为它无法解析给定的(非)表达式。您可能打算使用 perl newprg.pl
  • 您的程序需要输入,您需要使用流程的输出流将其输入管道

例如:

try {
    oProcess = oRuntime.exec(aCmdArgs);
    PrintWriter writer = new PrintWriter(new OutputStreamWriter(
            oProcess.getOutputStream()));
    writer.println(200);
    writer.close();
    oProcess.waitFor();
} catch (Exception e) {
    System.out.println("error executing " + aCmdArgs[0]);
}

关于java - 无法看到从 Java 类执行的 Perl 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15894255/

相关文章:

java - 为什么这个 Java foreach 循环会抛出错误?

php - UTF-8贯穿始终

c++ - Linux拒绝使用boost asio对套接字绑定(bind)的权限

perl - IPC::Open2 输出到已打开的文件句柄(按照文档示例)

java - 在 @PostConstruct 中调用 JSNI 方法 - Errai

java - 使用 spring 更新单个对象并通过 url 发送

regex - Perl 正则表达式从哈希替代

perl - 如何检查 perl cgi 请求是否来自 localhost

java - 如何从命令行获取值到 pojo 列表

c - SIGTERM 给所有子进程但不是父进程