Java Processbuilder返回255 < >我想运行带有文本输入和输出的C++程序exe,但不知何故,PalpBuffisher返回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); } 公共静态void runCommandPrompt(字符串[]cmds){ ProcessBuilder compileProcessBuilder=新的ProcessBuilder(cmds); 进程compileProcess=null; 试一试{ compileProcessBuilder.start(); int exitValue=compileProcess.waitFor(); System.out.println(exitValue); }捕获(例外e){ //TODO自动生成的捕捉块 e、 printStackTrace(); } } 公共静态void main(字符串[]args){ 字符串[]evaluateCommands={“cmd”, “/c”, “cd C:\\TestPath&select.exe C:\\output.txt”}; runCommandPrompt(evaluateCommands); }

Java Processbuilder返回255 < >我想运行带有文本输入和输出的C++程序exe,但不知何故,PalpBuffisher返回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); } 公共静态void runCommandPrompt(字符串[]cmds){ ProcessBuilder compileProcessBuilder=新的ProcessBuilder(cmds); 进程compileProcess=null; 试一试{ compileProcessBuilder.start(); int exitValue=compileProcess.waitFor(); System.out.println(exitValue); }捕获(例外e){ //TODO自动生成的捕捉块 e、 printStackTrace(); } } 公共静态void main(字符串[]args){ 字符串[]evaluateCommands={“cmd”, “/c”, “cd C:\\TestPath&select.exe C:\\output.txt”}; runCommandPrompt(evaluateCommands); },java,c++,command-line,Java,C++,Command Line,尝试将子进程的所有输出重定向到主进程。我相信你会看到错误的原因 ProcessBuilder compileProcessBuilder = new ProcessBuilder(cmds); // redirect all IO separately compileProcessBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT); compileProcessBuilder.redirectOutput(ProcessBuilder.

尝试将子进程的所有输出重定向到主进程。我相信你会看到错误的原因

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%
select.exe C:\output.txt
回显%ERRORLEVEL%

您也可以通过一个方法调用来实现这一点:compileProcessBuilder。@VGR您说得对。我只想显示详细的版本。我把你的意见写进了答案里。这是一个很好的补充。谢谢你的帮助。但我还有一个问题。我是一个C++讲座的TA。因此,尝试自动编译和测试结果。所以我决定写Java程序。程序获取homeworks文件夹。然后foreach student文件夹调用cl编译器并创建一个exe。之后,程序尝试测试用例,但出现了一个问题。程序在for循环中为每个学生运行exe,但某些进程返回正确的结果,但某些进程失败并返回255或-1073741819。我不明白为什么对某些前任执行相同的命令失败,而对其他前任执行相同的命令却不失败。当我使用你的解决方案时,问题仍然存在exists@setr我的回答不是为了解决问题。相反,它应该允许您查看子进程的输出(如果有)。