我在Windows上,我尝试使用编写在Linux操作系统上使用的Java应用程序,因为该程序将在某些时候启动一些shell脚本。
我有WSL(适用于Linux的Windows子系统,也称为Ubuntu bash),因此执行shell脚本应该不是问题,但我有一个错误:0x80070057
启动外部流程的代码:
public Process startProcess(List<String> commands ) throws IOException {
ProcessBuilder etProcessBuilder= new ProcessBuilder(commands);
Process etProcess = etProcessBuilder.start();
ProcessOutputReader stdReader= new ProcessOutputReader(etProcess.getInputStream(), LOGGER::info);
ProcessOutputReader errReader= new ProcessOutputReader(etProcess.getErrorStream(), LOGGER::error);
new Thread(stdReader).start();
new Thread(errReader).start();
return etProcess;
}
命令参数设置如下:
我还尝试添加“bash.exe”作为第一个命令,但它似乎不起作用。
ProcessOutputReader
是一个用于记录流程
class ProcessOutputReader implements Runnable {
private final InputStream inputStream;
private Consumer<String> loggingFunction;
ProcessOutputReader(InputStream inputStream, Consumer<String> loggingFunction) {
this.inputStream = inputStream;
this.loggingFunction = loggingFunction;
}
private BufferedReader getBufferedReader(InputStream is) {
return new BufferedReader(new InputStreamReader(is));
}
@Override
public void run() {
BufferedReader br = getBufferedReader(inputStream);
String ligne;
try {
while ((ligne = br.readLine()) != null) {
loggingFunction.accept(ligne);
}
} catch (IOException e) {
LOGGER.error("Error occur while reading the output of process ", e);
}
}
}
欢迎任何想法。
答案 0 :(得分:0)
*。sh不是可执行文件。
如果您的Java应用程序在wsl内部运行,则需要通过shell运行它,例如bash xxx.sh -args
或sh xxx.sh -args
。
如果您的Java应用在Windows上运行,则应为bash.exe -c xxx.sh