2

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;
    }
}
4

1 に答える 1

1

2 つの問題:

  • 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]);
}
于 2013-04-09T06:04:39.617 に答える