-5

Javaを介してperlスクリプトを実行しています。コードは以下のとおりです。

try {
    Process p = Runtime.getRuntime().exec("perl 2.pl");
    BufferedReader br = new BufferedReader(
                               new InputStreamReader(p.getInputStream()));
    System.out.println(br.readLine());
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

私のperlスクリプトは、コマンドラインから直接実行すると、入力ファイルを提供するように求められます。私の質問は、Java を介して perl スクリプトにファイル名を指定するにはどうすればよいですか?

4

1 に答える 1

0

スクリプトに別のコマンド ライン引数を追加したくない場合 (はるかにクリーンで堅牢です)、スクリプトの stdin に書き込む必要があります。

このスニペットは機能するはずです (Test.java):

import java.io.*;

public class Test
{
    public static void main(String[] args)
    {
        ProcessBuilder pb = new ProcessBuilder("perl", "test.pl");
        try {
            Process p=pb.start();
            BufferedReader stdout = new BufferedReader( 
                new InputStreamReader(p.getInputStream())
            );

            BufferedWriter stdin = new BufferedWriter(
                new OutputStreamWriter(p.getOutputStream())
            );

            //write to perl script's stdin
            stdin.write("testdata");
            //assure that that the data is written and does not remain in the buffer
            stdin.flush();
            //send eof by closing the scripts stdin
            stdin.close();

            //read the first output line from the perl script's stdout
            System.out.println(stdout.readLine());

        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

テストするには、この短い perl スクリプト (test.pl) を使用できます。

$first_input_line=<>;
print "$first_input_line"

お役に立てば幸いです。次のStackoverflowの記事もご覧ください。

*ヨスト

于 2013-07-17T12:47:41.450 に答える