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