Java Runtime.getRuntime()和Process Builder无法使用参数执行perl脚本

时间:2018-05-06 18:10:48

标签: java perl process processbuilder runtime.exec

我试图使用Runtime.getRuntime().exec()从Java程序调用Perl脚本。 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()调用脚本时,它运行正常。但是该命令将由我的程序生成,并且可能会有所不同,因此这不是一个永久的解决方案。

0 个答案:

没有答案