Я пытаюсь вызвать Perl-скрипт из Java-программы, используя Runtime.getRuntime().exec()
.Сценарий Perl имеет несколько аргументов.
Например:
abc.pl -dt 64 -dir C:\Projects\xyz -name pqr -args 'X24 X56'
Программа Perl выполняется, но не получает все аргументы.Это заставляет скрипт выдавать ошибку.Я пробовал следующие варианты:
Process p1 = Runtime.getRuntime().exec("abc.pl -dt 64 -dir C:\\Projects\\xyz -name pqr -args 'X24 X56'");
Process p2 = Runtime.getRuntime().exec(new String[]{"abc.pl","-dt 64","-dir C:\\Projects\\xyz","-name pqr","-args 'X24 X56'"});
Process p3 = Runtime.getRuntime().exec(new String[]{"abc.pl","-dt","64","-dir","C:\\Projects\\xyz","-name","pqr","-args","'X24 X56'"});
ProcessBuilder p4 = new ProcessBuilder("abc.pl -dt 64 -dir C:\\Projects\\xyz -name pqr -args 'X24 X56'");
p4.start();
List<String> cmds = new ArrayList<>();
cmds.add("abc.pl");
cmds.add("-dt 64");
cmds.add("-dir C:\\Projects\\xyz");
cmds.add("-name pqr");
cmds.add("-args 'X24 X56'");
ProcessBuilder p5 = new ProcessBuilder(cmds);
p5.start();
List<String> cmd = new ArrayList<>();
cmd.add("abc.pl");
cmd.add("-dt");
cmd.add("64");
cmd.add("-dir");
cmd.add("C:\\Projects\\xyz");
cmd.add("-name");
cmd.add("pqr");
cmd.add("-args");
cmd.add("'X24 X56'");
ProcessBuilder p6 = new ProcessBuilder(cmd);
p6.start();
Команда отлично работает на терминале.
Я также пытался жестко кодировать команду в скрипте bash.Когда я вызвал скрипт, используя Runtime.getRuntime()
, он работал нормально.Но команда будет сгенерирована моей программой и может отличаться, так что это не постоянное решение.