Я пытаюсь вызвать 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 не создается.
Почему это происходит?
благодаря
на самом деле ваш код работает. но проблема в том, что файл, созданный 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());
}
Вы не можете использовать переменную $ 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();
}
waitFor
.
open
:open(my $fh, '>', 'report.txt') or die "Failed to open report.txt: $!";
Вы также можете добавитьuse autodie;
в верхней части вашего Perl-скрипта, чтобы сделать эти проверки автоматически.