代码之家  ›  专栏  ›  技术社区  ›  finnw

在Eclipse中运行程序时,将标准输出与标准错误分开

  •  2
  • finnw  · 技术社区  · 15 年前

    我正在Eclipse中调试一个Java程序。该程序通常将二进制数据写入其标准输出,但它可以写入错误消息并将跟踪堆栈到其标准错误流。

    到目前为止,我只知道如何将标准输出和标准错误重定向到同一个文件。除了在程序中添加一个新的命令行选项之外,我看不到将两者分开的方法。


    相关的: I/O redirection in Eclipse?

    4 回复  |  直到 7 年前
        1
  •  4
  •   VonC    15 年前


    看见 this thread

    import java.io.IOException;
    import java.io.OutputStream;
    import java.io.PrintStream;
    
    
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.layout.FillLayout;
    import org.eclipse.swt.widgets.*;
    
    
    public class ConsumeSysout {
    
    
        public static void main(String[] args) {
            Display display = new Display();
            Shell shell = new Shell(display);
            shell.setLayout(new FillLayout());
            final Text text = new Text(shell, SWT.NONE);
            shell.open();
    
    
            OutputStream out = new OutputStream() {
                @Override
                public void write(int b) throws IOException {
                   text.append(Character.toString((char) b));
                }
            };
            System.setOut(new PrintStream(out));
    
    
            System.out.println("Hello World!");
    
    
            while (!shell.isDisposed()) {
                if (!display.readAndDispatch())
                    display.sleep();
            }
            display.dispose();
        }
    }
    
        2
  •  2
  •   Peter Mortensen mkoryak    7 年前

    从( http://www.eclipsezone.com/eclipse/forums/t52910.html ):

    如果有人希望看到Eclipse中已经部署的插件写入System.out/System.err的字符串,那么可以通过在命令提示符下以调试模式运行Eclipse来完成 eclipse.exe -debug 或者,您可以稍加修改以捕获JVM(运行Eclipse)的stderr/stdout,如中所述 Redirect stdout and stderr of Eclipse to a file (Eclipse 3.0 on WinXP)

    此线程包含一些相关内容: Redirect STDERR / STDOUT of a process AFTER it's been started, using command line?

    此链接更特定于DOS/Windows: Stderr

    我的意思是重定向stderr。因为 文件或管道到程序中 斯特德尔。“foo>out”仅重定向 食物的标准,而不是标准。后者

    因为stderr通常是 将打印重要的错误消息, 这是非常不幸的,因为 使我们无法检测数据中的错误 无人值守的工作。

    那你是做什么的?一个解决办法是 它的衍生物,用途

    foo >out 2>&1
    

    保存foo的stdout和stderr 出去。同样,使用

    foo 2>&1 | bar
    

    为foo的标准输出和标准输出提供管道 去酒吧。如果你被DOS困住了, Stderr就是你需要的。

    正在重新定向或管道标准输出 斯特德尔也是。

    我必须继续寻找Windows解决方案。PowerShell已经很流行,可能值得一看。

        3
  •  1
  •   Xanatos    15 年前

    好的,您可以用自己的打印流替换System.out,该打印流会写入文件。我只是即兴写下这句话,也许这并不完全正确,但你明白了:

    FileOutputStream fos = new FileOutputStream("c:\myfile.bin");
    BufferedOutputStream bos = new BufferedOutputStream(fos);
    PrintStream ps = new PrintStream(bos);
    System.out = ps;
    

    这个,或者类似的东西应该能起作用。所有通常进入标准输出的输出现在都将进入该文件(当您关闭程序时,不要忘记关闭打印流(),否则它不会总是将最后一个数据刷新到该文件。)

        4
  •  0
  •   VonC    7 年前

    • 或者不重定向任何内容(所有输出都在控制台中),并使用类似的插件 Grep Console 突出相关产出

      http://marianold.schedenig.name/grepconsole/img/grepconsole.png

    • 和/或重定向文件中的所有内容,并使用类似 NTail 并使用一些“筛选行”从日志文件显示中排除所选行(这可能更接近您要查找的内容)。

      http://www.certiv.net/images/NTailScreenShot001.jpg

    (您可以根据需要/需要定义多个页面视图。)