当stdout用于输出二进制数据时,如何将调试/详细信息输出到终端?

时间:2015-11-04 23:23:35

标签: c++ c linux pipe

我正在编写一个打开文件并输出一些已处理版本的应用程序。它将是一个图形桌面应用程序,但也必须适合在Web服务器上运行。因此,它需要为Web应用程序的后端代码(可能是PHP)提供合适的接口。

我认为最通用的界面是CLI,每个文件调用一次程序。生成的数据通过stdout传出。这样,就不必创建临时文件;这一切都发生在记忆中。

我希望能够从终端手动调用程序并查看详细的调试输出。通常,当stdout用于输出数据流时,输出其他信息的传统方式是什么?我应该使用stderr还是其他方式?我希望能够像这样调用程序并查看一些调试输出。

./ program --some-option --verbose --file =" ./ myfile.txt" > ./output.txt

我可以使用文件描述符3(或其他数字)作为二进制数据,使用stdout作为详细信息并执行此操作吗?

./ program --some-option --verbose --file =" ./ myfile.txt" 3 GT; ./output.txt

由于

2 个答案:

答案 0 :(得分:2)

通常的做法是使用stderr和stdout来分隔不同类型的输出。

但最好你应该使用参数来允许用户指定在哪里以及是否写出某个类别的输出。 您可以使用--enable-verbose-output--processing-log=foo.log

之类的内容

您也可以考虑在您可能已创建的日志文件中处理此问题。通过在日志记录框架中设置一定的详细程度,您可以根据需要将所需的输出写入日志中。

答案 1 :(得分:0)

使用stderr:

 ArrayList <myCircleArray> = new ArrayList();
    void setup(400, 400) {
  size();
  smooth();



 for(int i=0; i<myCircleArray.size(); i++) {
    myCircleArray.add ( new MovingCircle(10,10+i*10,10) ); 
}
}

void draw() {

  background(0);


for (int i=0; i<myCircleArray.size(); i++) {

  MovingCircle myCircle = myCircleArray.get(i);
  myCircle.update();
  myCircle.drawCircle();


}

  }

void mousePressed() {
myCircleArray.add ( new MovingCircle(mouseX,mouseY,10) ); 
}


class MovingCircle {

  float x;
  float y;
  float xSpeed;
  float ySpeed;

  float circleSize;

  MovingCircle(float xpos, float ypos, float csize) {
    x = xpos;
    y = ypos;


    circleSize = csize;

  }

  void update() {
    x += xSpeed;
    y += ySpeed; 
  }


  void drawCircle() {

    fill(255);
    ellipse(x, y, circleSize, circleSize);

  }


}