我有一个命令并使用Eclipse来执行此命令。结果打印到Console选项卡中。
String[] cmdLine = buildCommandLine(configuration, true);
Process process = DebugPlugin.exec(cmdLine, null, null);
DebugPlugin.newProcess(launch, process, "", null);
如何从“控制台”选项卡获取所有数据?
答案 0 :(得分:1)
为流程添加org.eclipse.debug.core.IStreamListener。
IProcess process = DebugPlugin.newProcess(launch, process, "", null);
IStreamsProxy streamsProxy = process.getStreamsProxy();
IStreamMonitor streamMonitor = streamsProxy.getOutputStreamMonitor();
IStreamListener yourListener = ....;
streamMonitor.addListener(yourListener );
我会这样做,因为上面的代码是"核心代码" (没有ui代码)org.eclipse.debug.core
。
如果您使用MessageConsole中建议的How to read message from console tab view in eclipse plugin development,则会引入从核心到ui代码的依赖关系。
答案 1 :(得分:1)
方法DebugPlugin.newProcess
的文档说:
创建并返回一个表示给定java.lang.Process的新进程。为系统进程中的I / O流创建流代理。
所以,这里有两件事值得注意:首先,这个方法返回一些东西(你忽略了)。其次,它有一个流代理,用于访问进程的I / O流。您只需查询它们以获取所需的输出:
String[] cmdLine = buildCommandLine(configuration, true);
Process p = DebugPlugin.exec(cmdLine, null);
IProcess process = DebugPlugin.newProcess(launch, p, "");
process.getStreamsProxy().getErrorStreamMonitor().addListener(myErrorStreamListener());
process.getStreamsProxy().getOutputStreamMonitor().addListener(myOutputStreamListener());
您必须实现方法myErrorStreamListener
和myOutputStreamListener
以返回能够赶上控制台输出的适当侦听器。