gpt4 book ai didi

使用任何命令行参数进行 exec 调用时出现 Java IOException

转载 作者:行者123 更新时间:2023-12-02 06:50:03 25 4
gpt4 key购买 nike

我有一个 java 应用程序,最终将相当深入地进行外部流程集成,包括与这些流程的 IPC。但现在,我想做的只是从 java 运行一个 powershell 脚本。

我有什么:

private void runPowershellScript() {
String command =
"" + "powershell" + " ";
// Paths.get("").toAbsolutePath() + "\\" + scriptFileName + " " +
// Paths.get("").toAbsolutePath() + "\\" + INPUT_FILE_NAME + " " +
// Paths.get("").toAbsolutePath() + "\\" + OUTPUT_FILE_NAME + "";

try {
ProcessBuilder builder = new ProcessBuilder(command);
builder.redirectErrorStream(true);
Process process = builder.start();

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;

while ((line = reader.readLine ()) != null) {
System.out.println ("Stdout: " + line);
}

} catch (IOException e) {
e.printStackTrace();
}
}

根据您在此处看到的内容,我通过该阅读器获得了 Windows Powershell 名称和版权,但是如果我添加任何注释掉的行(所有这些行都解析为正确的路径,例如 C:\Users\Geoff\Code\OPTIP\FakeProgram.ps1)我得到:java.io.IOException: 无法运行程序“powershell C:\Users\Geoff\Code\OPTIP\FakeProgram.ps1 ”: CreateProcess error=2,系统找不到指定的文件

我尝试了十几种不同的强引号和弱引号组合,并且尝试将它们作为参数传递给 cmd.exe/c powershell ... 但我尝试过的都没有运行剧本。如果命令字符串中有一个空格,我会收到 IO 异常。

我想知道这是否与字符编码有关?当我简单地调用powershell时,我从reader.readLine()返回的是:W\u0000i\u0000n\u0000 ... 我认为这是我的 IDE (IntelliJ) 告诉我它的“Windows Powershell”的方式,每个字母之间有一个 null unicode 字符。

Java ProcessBuilder documentation对于您可以作为参数传递的内容有点模糊:

a command, a list of strings which signifies the external program file to be invoked and its arguments, if any. Which string lists represent a valid operating system command is system-dependent. For example, it is common for each conceptual argument to be an element in this list, but there are operating systems where programs are expected to tokenize command line strings themselves - on such a system a Java implementation might require commands to contain exactly two elements.

我不知道这意味着什么。我试图给它的命令可以在 CMD 和 Powershell 窗口中运行,也可以在 Windows 运行对话框中运行。

包含上述方法类的要点: https://gist.github.com/Groostav/9c5913e6f4696a25430d包含我的 powershell 脚本的要点: https://gist.github.com/Groostav/347a283ac7ec6a738191

感谢您的帮助。

最佳答案

您必须将参数放在单独的字符串中,而不是将它们作为单个字符串连接到 powershell 调用。类似的东西

new ProcessBuilder("Powershell", scriptFileName,  INPUT_FILE_NAME);

关于使用任何命令行参数进行 exec 调用时出现 Java IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18152306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com