是否应在stdout或stderr上打印命令行"usage"?

Oli*_*ire 40 command-line stdout stderr usage-message

打印应用程序的"用法"时,是应该在stdout还是stderr上完成?

根据应用程序,我看过几个案例,但似乎没有一个规则.也许我错了,有一个很好的做法.在那种情况下,它是什么?

Ore*_*ost 45

从来没有想过它,但是如果用无参数或错误的参数调用程序,为什么不将使用说明写入stderr,并在用--help(或类似)参数调用时将其写入stdout ?这样,如果由于错误而显示用法,则转到stderr,如果由于用户请求它而不是错误,则转到stdout.似乎逻辑,不知何故.

  • 我同意.您还应该考虑退出代码 - 如果使用错误的参数调用程序,它应该返回1,如果使用--help或类似函数调用它,它应该返回0. (11认同)

Urh*_*dur 7

我同意,明确要求"用法"(通过-h, - ?或--help选项)应到标准输出,而"使用"打印在响应不正确的语法或其他错误应该去到stderr.

但请注意,越来越流行的popt库(处理命令行解析;其名称代表"解析选项")包括自动生成帮助的工具,并始终将其发送给stderr.我引用popt手册页:

当--usage或--help被传递到使用POPT的自动帮助,POPT只要它找到的选项显示在stderr上相应的消息,并退出为0的返回代码程序的程序.

我相信这是一个popt bug,但问题是POSIX(或它推迟的ISO C)从未定义"诊断输出"的含义.只需阅读'man stderr'或POSIX.1-2008即可.