【发布时间】:2013-08-02 21:26:04
【问题描述】:
我正在尝试使用 Java 启动一个进程,或者使用 ProcessBuilder 或 apache DefaultExecutor 作为另一个用户,并且能够读取该进程的标准输出: 我拥有的示例代码:
OutputStream out = null;
OutputStream err = null;
InputStream in = null;
String line = "runas /noprofile /user:dev /savecred /env \"java -cp myProj.jar com.myComp.myProj.Main -libjardirs target/lib\"";
CommandLine cmdLine = CommandLine.parse(line);
DefaultExecutor executor = new DefaultExecutor();
executor.setExitValue(0);
PumpStreamHandler streamHandler = new PumpStreamHandler(out, err, in);
executor.setStreamHandler(streamHandler);
streamHandler.start();
ExecuteWatchdog watchdog = new ExecuteWatchdog(60000);
executor.setWatchdog(watchdog);
int exitValue = executor.execute(cmdLine);
我尝试了不同的变化,但到目前为止没有运气。 Runas 启动另一个执行的进程,但 stdout 仅从 runas 本身获取信息,该信息不返回任何内容以及在该进程完成之前返回的主要内容。 我不想在该 jar 执行完成之前继续执行我的程序,并且我还希望能够在该 jar 执行时(或至少在它完成执行时)获取该 jar 的标准输出。如果达到 timelimt,还需要能够终止该 jar 的执行
【问题讨论】:
-
试试 processBuilder.redirectOutput(Redirect.INHERIT) stackoverflow.com/questions/10540631/…
-
@MGorgon 这无济于事。问题是 OP 想要的输出没有出现在正在创建的子进程中,而是出现在由
RunAs启动的另一个分离进程中。 -
这无济于事,因为我们使用的是 Java 6,而
processBuilder.redirectOutput(Redirect.INHERIT)仅存在于 Java 7 中,我不允许将项目更改为最新的 Java
标签: java runtime.exec processbuilder runas