Невозможно вызвать Perl-скрипт из Java

1

Я пытаюсь вызвать Perl-скрипт из Java, но похоже, что я не могу этого сделать.

Вот мой скрипт Perl, который создает файл. Это простой скрипт.

use strict;
use warnings;
open(my $fh, '>', 'report.txt');
print $fh "My first report generated by perl\n";
close $fh;
print "done\n";

Вот мой Java-код, который вызывает над Perl-скриптом.

package perlfromjava;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class PerlFromJava {

public static void main(String[] args) {
    try {

        String command = "perl $HOME/Documents/hello.pl";
        System.out.println(command);
        Process proc = Runtime.getRuntime().exec(command);
    } catch (IOException ex) {
        Logger.getLogger(PerlFromJava.class.getName()).log(Level.SEVERE, null, ex);
    }
}

}

Когда я запускаю Perl-скрипт из командной строки, он работает отлично, но когда я вызываю скрипт Perl из Java, файл report.txt не создается.

Почему это происходит?

благодаря

  • 0
    Вы всегда должны проверять, успешны ли вызовы open : open(my $fh, '>', 'report.txt') or die "Failed to open report.txt: $!"; Вы также можете добавить use autodie; в верхней части вашего Perl-скрипта, чтобы сделать эти проверки автоматически.
  • 0
    Понял. Спасибо :) Но в этом ли проблема, когда я запускаю Perl-скрипт из Java, файл report.txt не создается?
Показать ещё 3 комментария
Теги:

2 ответа

1
Лучший ответ

на самом деле ваш код работает. но проблема в том, что файл, созданный perl, генерируется там, где вы запускаете Java файл. Если вы используете идеал, то файл, несомненно, создан внутри этой папки проекта. Если вы ищете "report.txt", вы найдет файл. Чтобы понять, измените ли ваш Perl-скрипт на

use strict;
use warnings;
open(my $fh, '>', 'C:/Users/Madhawa.se/Desktop/js/report.txt');
print $fh "My first report generated by perl\n";
close $fh;
print "done\n";

intead дать report.txt дать полный путь, где вы хотели бы создать файл report.txt в perl-скрипте и посмотреть, как он работает.

 try {

    String command = "perl C:\\Users\\Madhawa.se\\Desktop\\js\\mm.pl";
    Process process = Runtime.getRuntime().exec(command);
    process.waitFor();
    if (process.exitValue() == 0) {
        System.out.println("Command Successful");
    } else {
        System.out.println("Command Failure");
    }
} catch (Exception e) {
    System.out.println("Exception: " + e.toString());
}
1

Вы не можете использовать переменную $ HOME из Java Runtime. В Java вы можете использовать System.getenv("HOME") или кросс-платформенную System.getProperty(String) чтобы получить его, например

String command = "perl " + System.getProperty("user.home") 
        + "/Documents/hello.pl";

Список доступных свойств системы включен в учебники по Java.

редактировать

Не забудьте дождаться завершения Process,

try {
    Process proc = Runtime.getRuntime().exec(command);
    proc.waitFor();
} catch (IOException e) {
    e.printStackTrace();
} catch (InterruptedException e) {
    e.printStackTrace();
}
  • 0
    Используется это все еще не работает
  • 0
    @ user3745870 Отредактировано, чтобы добавить waitFor .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню