【发布时间】:2015-11-13 22:26:23
【问题描述】:
在我的 java 程序中,我试图通过 CMD 运行另一个程序,其输出出现在前台的命令窗口中,然后分析主 java 程序中子程序 (foo) 的退出代码。不幸的是,我似乎只能访问 CMD 窗口的退出代码,该代码始终为 0。
以下是我正在做的事情的sn-p:
ProcessBuilder pb = new ProcessBuilder();
pb.directory(new File(dir));
pb.command("cmd","/c","start","/wait","foo.exe",arg);
process = pb.start();
exitVal = process.waitFor();
但无论 foo 如何退出,exitVal 始终为 0。我怎样才能得到 foo 的退出代码?
我对 java 也很陌生,所以如果有更优雅的方式来做这件事,我愿意接受建议。
【问题讨论】:
-
很可能
foo在退出并出现错误时不会返回正确的值。为什么不举一个总是返回 0 的foo的例子? -
我知道 foo 返回正确的值,因为我可以从命令窗口调用它,然后使用 'echo %errorlevel%' 查看它的返回值。什么样的例子可以帮助你?
-
一个总是返回 0。另外我不知道你是怎么得到
%errorlevel%的。 -
例如,如果
arg无效 foo 将立即退出,退出代码应该是 1,但是exitVal仍然读取 0,因为 cmd 进程成功关闭。抱歉,我的意思是当我从命令提示符运行 foo 时,Windows 局部变量%errorlevel%包含最新的退出代码。 -
那你读的不是
foo的返回值,而是cmd的返回值。直接启动foo,而不是通过cmd。