Command line 命令行是否应该;用法“;打印在标准字体还是标准字体上?

Command line 命令行是否应该;用法“;打印在标准字体还是标准字体上?,command-line,stdout,stderr,usage-message,Command Line,Stdout,Stderr,Usage Message,当打印应用程序的“用法”时,是在标准输出还是在标准输出上进行 根据应用程序的不同,我见过几个案例,但似乎没有一条规则。也许我弄错了,有一个很好的做法。在这种情况下,它是什么?这只能是意见,但我认为写信给stderr是最好的选择。这样,即使正常输出被重新定向,如果用户犯了错误,也会显示使用信息。根据我的说法,标准是信息的出现方式。如果它需要立即反应或注意,我会将其放入stderr(因为它是无缓冲的)。如果它提供了某种信息,并且不考虑任何错误,那么它就是stdout。我会使用STDERR,因为简单地

当打印应用程序的“用法”时,是在标准输出还是在标准输出上进行


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

这只能是意见,但我认为写信给stderr是最好的选择。这样,即使正常输出被重新定向,如果用户犯了错误,也会显示使用信息。

根据我的说法,标准是信息的出现方式。如果它需要立即反应或注意,我会将其放入stderr(因为它是无缓冲的)。如果它提供了某种信息,并且不考虑任何错误,那么它就是stdout。

我会使用STDERR,因为简单地将它放到stdout可能会导致管道输出出现问题,并且它会出现在cronjobs的日志中,因此您更容易注意到错误。

从未想过它,但是,如果在调用程序时没有参数或参数错误,为什么不将使用说明写入stderr,并在使用
--help
(或类似)参数调用时将其写入stdout?这样,如果由于错误而显示使用情况,则转到stderr;如果由于用户请求而不是错误,则转到stdout。从某种程度上说,似乎是合乎逻辑的。

我同意明确地请求的“用法”(通过-h、--?或--help选项)应该转到stdout,而为响应错误语法或其他错误而打印的“用法”应该转到stderr

但是,请注意,日益流行的popt库(它处理命令行解析;它的名称代表“解析选项”)包括一个自动生成帮助的工具,并且它总是将帮助发送到stderr。我引用popt手册页:

将--usage或--help传递给使用popt的程序时 自动帮助,popt在stderr上显示相应的消息 一旦找到该选项,并使用返回代码退出程序 0


我认为这是一个popt错误,但问题是POSIX(或它所遵从的ISO C)从未定义“诊断输出”的含义。只要读一下“man stderr”或。

我总是被屏幕上有很多不适合的选项的程序所困扰,但是当以
程序--help(更少的
运行时),我看不到任何东西,因为帮助实际上是发送给stderr的

我喜欢明确请求的用法(即
--help
选项)应该将输出发送到stdout的想法。如果选项无效,我认为没有必要显示详细的使用信息。肯定会有一条错误消息,比如
Invalid option”--some option。运行“程序--help”获取使用信息。
发送到stderr。如果程序决定在默认情况下输出关于无效选项的用法信息,或者在没有选项的情况下调用时,我认为应该会有一条短错误消息,抱怨无效用法,但是帮助本身可能会转到stdout。

如果
--help
则是stdout,否则是stderr。以下是面向Java用户的JCommander代码:

MyOptions myOptions = new MyOptions();
JCommander jCommander = new JCommander(myOptions);

try {
    jCommander.parse(args);
} catch (ParameterException exp) {
    /* print the exp here if you want */
    StringBuilder sb = new StringBuilder();
    jCommander.usage(sb);
    System.err.println(sb.toString());
    System.exit(1);
}

if(myOptions.isHelp()) {
    jCommander.usage();
    System.exit(0);
}
命令行“用法”应该打印在stdout或stderr上吗

我认为这取决于组织的编码标准。在一个组织之外,这可能是一个争论不休的话题,比如哪个是最好的操作系统,哪个是最好的编辑器,哪个是正确的宗教

浏览(1997年9月),Java没有指定它。没有答案,这将是无休止的辩论

根据,应在标准输出上打印:

4.7.2——帮助

“标准--help”选项应输出有关如何操作的简要文档 在标准输出上调用程序,然后成功退出。 一旦看到这一点,就应该忽略其他选项和参数,并且 程序不应执行其正常功能

在“--help”选项输出的末尾附近,请放置行 提供错误报告的电子邮件地址,该包的主页 (通常为“”,而 使用GNU程序的帮助。格式如下:

Report bugs to: mailing-address
pkg home page: <http://www.gnu.org/software/pkg/>
General help using GNU software: <http://www.gnu.org/gethelp/>
emacsserver (GNU Emacs) 19.30
程序名应该是一个常量字符串;不要从 argv[0]。其目的是说明 程序,而不是它的文件名。还有其他方法可以找到 在路径中找到命令的精确文件名

如果该计划是较大计划的附属部分,请提及 括号中的包名称,如下所示:

Report bugs to: mailing-address
pkg home page: <http://www.gnu.org/software/pkg/>
General help using GNU software: <http://www.gnu.org/gethelp/>
emacsserver (GNU Emacs) 19.30
如果软件包的版本号与此不同 程序的版本号,您可以提及软件包的版本号 就在右括号之前

如果您需要提及以下库的版本号: 与包含此程序的包分开分发, 为此,您可以为每个版本打印一行额外的版本信息 要提及的库。这些行的格式与 第一行

请不要提及程序使用的所有库“只是 为了完整性”-这将产生大量无用的混乱。 请仅在实践中发现时提及库版本号 它们在调试中对您非常重要

应在版本号行或多行之后添加以下行 版权声明。如果需要多个版权声明, 把每一个放在一条单独的线上

下一步应该遵循一行说明许可证,最好使用 下面是缩写,并简要说明该程序是免费的 软件,用户可以自由复制和更改它 在法律允许的范围内,不存在任何担保。参见 建议的措辞如下

完成输出时,可以列出该文档的主要作者 程序,作为w