Как я могу выполнить скрипт Perl из моей Java-программы?

Я пишу небольшой инструмент, который должен вызывать Perl-скрипт для некоторых вещей.

Я уже знаю и написал код для его вызова, но я должен предоставить полный путь к скрипту 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?

3 ответа

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

Изменить: я забыл поставить пробел между -e и сценарий; вы также должны избегать обратной косой черты и двойных кавычек в вашем скрипте (дважды, если вы используете скрипт в Java вместо чтения его из jar-файла), что делает вещи немного неловкими для более чем одной строки.

Так что, вероятно, было бы лучше использовать 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();

Если вы читаете / сохраняете свой Perl-скрипт в строке, вы можете выполнить его следующим образом:

perlScript = "print \"HELLO\\n\"; print \"CIAOOOO\\n\";";
String perl_cmd = "echo \"" + perlScript + "\" |perl";
Runtime.getRuntime().exec(perl_cmd);

Надеюсь, поможет...

Вы можете записать сценарий в файл, сказать временный файл и выполнить его оттуда, а затем удалить его, когда закончите.

Другие вопросы по тегам