我想运行带有文本输入和输出的 C++ 程序 exe,但不知何故 processbuilder 返回 255 并且不将结果打印到输出 txt。
public static void runCommandPrompt(String[] cmds) {
ProcessBuilder compileProcessBuilder = new ProcessBuilder(cmds);
Process compileProcess = null;
try {
compileProcess = compileProcessBuilder.start();
int exitValue = compileProcess.waitFor();
System.out.println(exitValue);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args){
String[] evaluateCommands = { "cmd",
"/c",
"cd C:\\TestPath & select.exe <C:\\input.txt >C:\\output.txt" };
runCommandPrompt(evaluateCommands);
}
最佳答案
尝试将子进程的所有输出重定向到主进程。相信您会看到错误原因。
ProcessBuilder compileProcessBuilder = new ProcessBuilder(cmds);
// redirect all IO separately
compileProcessBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT);
compileProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
compileProcessBuilder.redirectError(ProcessBuilder.Redirect.INHERIT);
// or use a convenient call for all at once (thanks VGR to mention it)
compileProcessBuilder.inheritIO();
Process compileProcess = compileProcessBuilder.start();
更新
如果您手动启动它们,该进程会返回什么?也许他们真的返回了那些退出代码。
run.cmd
select.exe <C:\input.txt >C:\output.txt
echo %ERRORLEVEL%
关于Java Processbuilder 返回 255,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33238093/