我在让 .getruntime.exec() 正常工作时遇到了一些问题。这是处理该部分的代码:
while (line != null)
{
String name = line;
String commandFull = commandFirst + name + commandLast;
String[] fullCommand = new String[] {commandFirst, name, commandLast};
for(int i=0;i<3;i++)
{
System.out.print(fullCommand[i]);
}
Runtime runner = Runtime.getRuntime();
Process p = runner.exec(fullCommand);
outFile.println(fullCommand);
line = inFile.readLine();
}
它打印出它应该看起来的命令。当我在这里运行程序时,输出是:
adfind -b dc=stuff,dc=com -f "cn=user" |find "displayName" >> fullList.txt
Exception in thread "main" java.lang.IllegalArgumentException
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at lookup.main(lookup.java:41)
最佳答案
您正试图在没有 shell 的情况下执行 shell 命令。
也就是说,您正在尝试执行 shell 会解释的内容(特别是管道 '|'
和附加 '>>'
)。要解决这个问题,让 Java 执行一个 shell 实例并将整个命令传递给 shell。这将如何工作取决于平台。
例如在 Linux 中:
String fullCommand = {"/bin/sh", "-c", "find -b dc=stuff,dc=com -f \"cn=user\" |find \"displayName\" >> fullList.txt"};
或者在 Windows 中:
String fullCommand = {"cmd.exe", "/c", "find -b dc=stuff,dc=com -f \"cn=user\" |find \"displayName\" >> fullList.txt"};
关于Java Runtime.getRuntime() 非法参数异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1121871/