Java Runtime.getRuntime () и Process Builder не могут выполнить сценарий perl с аргументами - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь вызвать 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(), он работал нормально.Но команда будет сгенерирована моей программой и может отличаться, так что это не постоянное решение.

...