0

私は、Perl スクリプトを呼び出して何らかの処理を行う必要がある小さなツールを作成しています。

それを呼び出す方法についてのコードは既に知っていて、書いていますが、exec().

そのスクリプトを、直接呼び出すことができる一種のパッケージとして提供する可能性はありますか?

後で実行可能な JAR を生成したいのですが、Perl スクリプトを提供するためのツール全体も必要ですが、それがどこにあるかはわかりません。

現在、次のようになっています。

private void extractAudioStream() {
    inputFile = "C:\\Users\\Stefan\\Documents\\temp_tshark\\forward_stream.pcap";
    outputFile_audiostream = "C:\\Users\\Stefan\\Documents\\temp_tshark\\forward_stream.pcm";

    String perl_cmd = "perl C:\\Users\\Stefan\\Documents\\tshark_bin\\rtp_dump.pl " + inputFile + " " + outputFile_audiostream;

    try {
        p = Runtime.getRuntime().exec(perl_cmd);

質問が十分に明確であることを願っています。

perlシステムコマンドは完全修飾パスを待っているので、これは簡単ではないかもしれません。現在の場所を検出して cmd-String に渡す可能性はありますか?

4

3 に答える 3

2
String perl_cmd = "perl -e \"print \\\"bla\\n\\\";\";"
Runtime.getRuntime().exec(perl_cmd);

編集:-eとスクリプトの間にスペースを入れるのを忘れました。また、スクリプト内のバックスラッシュと二重引用符をエスケープする必要があります (jar ファイルからスクリプトを読み取るのではなく、Java でインライン スクリプトを使用している場合は 2 回)。

Process.getOutputStreamしたがって、スクリプトを Perl インタープリターの標準入力に書き込むために使用する方がおそらく良いでしょう:

  String perlScript = "print \"hello\";"; // get from a jar with Class.getResourceAsStream()
  Process p = new ProcessBuilder("perl").redirectErrorStream(true).redirectOutput(ProcessBuilder.Redirect.INHERIT).start();
  BufferedWriter w = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
  w.write(perlScript);
  w.close();
  p.waitFor();
于 2012-04-09T19:41:09.730 に答える
0

スクリプトを一時ファイルなどのファイルに書き出し、そこから実行し、完了したら削除することができます。

于 2012-04-09T18:35:08.757 に答える