繁体   English   中英

为什么输出的更改顺序较少?

[英]Why does less change order of output?

我正在运行一个python脚本,当以详细模式运行它时会产生某些输出。 当我将输出传递给less实用程序时,输出的顺序不同。 作为参考,该脚本几乎是以下内容:

http://svn.apache.org/repos/asf/subversion/trunk/tools/client-side/change-svn-wc-format.py

具体来说,我收到“以下字段的数据”消息,并且在运行时未将输出传递到更少的消息时,该消息最后出现。 当我将输出传递给less时,输出首先神秘地显示。

有人可以解释吗?

我已确定错误消息发送至stderr,而详细消息发送至stdout。 但是,即使我这样做:

./svnfixversion ./ 1.5 --verbose 2>&1 | less

输出与我刚离开|时的输出不同。 减。 如果将stderr重定向到stdout,是否应该少保留命令?

运行时:

./svnfixversion ./ 1.5 --verbose

stdout是行缓冲的, stderr是非缓冲的。

在:

./svnfixversion ./ 1.5 --verbose 2>&1 | less

它的stdout是完全缓冲的, stderr是非缓冲的。

./svnfixversion FILE* stdout的缓冲模式使这两种情况下的输出有所不同。

如果希望第二个输出与第一个输出相同,请将stdout缓冲模式设置为使用stdbuf应用程序缓冲的行:

stdbuf --output=L ./svnfixversion ./ 1.5 --verbose 2>&1 | less

在现代bash您可以替换2>&1 | |&更短。


实际情况是,在调用main()之前的程序启动时, glibc调用isatty(STDOUT_FILENO)来确定stdout是否已连接到终端。 如果是这样,则stdout是行缓冲的,否则是全缓冲的。 stderr始终是无缓冲的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM