标签: stdout

进度报告/日志信息是否属于 stderr 或 stdout?

是否有官方的 POSIX、GNU 或其他指南来说明应该在何处打印进度报告和日志信息(例如“Doing foo; foo done”)?就个人而言,我倾向于将它们写入 stderr,这样我就可以重定向 stdout 并仅获取程序的实际输出。我最近被告知这不是一个好的做法,因为进度报告实际上并不是错误,只有错误消息应该打印到 stderr。

这两个职位都有意义,当然您可以根据您正在做的事情的细节选择一个或另一个,但我想知道是否有一个普遍接受的标准。我无法在 POSIX、GNU 编码标准或任何其他此类广泛接受的最佳实践列表中找到任何特定规则。

我们有一些类似的问题,但它们没有解决这个确切的问题:

那么,对于进度报告和其他信息性消息(不是程序实际输出的一部分)应该在哪里打印,是否有任何官方规则?

standard gnu posix stdout stderr

96
推荐指数
4
解决办法
8453
查看次数

如何以优雅的方式永远什么都不做?

我有一个程序可以生成有用的信息,stdout但也可以从stdin. 我想将其标准输出重定向到一个文件,而不在标准输入上提供任何内容。到目前为止,很好:我可以做到:

program > output
Run Code Online (Sandbox Code Playgroud)

并且不要在 tty 中做任何事情。

但是,问题是我想在后台执行此操作。如果我做:

program > output &
Run Code Online (Sandbox Code Playgroud)

程序将被挂起(“挂起(tty 输入)”)。

如果我做:

program < /dev/null > output &
Run Code Online (Sandbox Code Playgroud)

程序立即终止,因为它到达 EOF。

似乎我需要的是将program某些内容导入到无限期不执行任何操作且不读取的内容中stdin。以下方法有效:

while true; do sleep 100; done | program > output &
mkfifo fifo && cat fifo | program > output &
tail -f /dev/null | program > output &
Run Code Online (Sandbox Code Playgroud)

然而,这一切都非常难看。有是一种优雅的方式,使用标准的Unix工具,以“什么都不做,无限期”(意译man true)。我怎么能做到这一点?(我这里优雅的主要标准:没有临时文件;没有忙碌等待或定期唤醒;没有异国情调的实用程序;尽可能短。)

bash shell-script background-process stdout stdin

95
推荐指数
6
解决办法
5万
查看次数

我可以将一台服务器上的标准输出通过管道传输到另一台服务器上的标准输入吗?

stdout在一台 CentOS 服务器上需要通过管道连接到stdin另一台 CentOS 服务器上。这可能吗?

更新

ScottPack、MikeyB 和 jofel 都有有效的答案。我将答案授予 Scott,因为即使我的问题没有将安全性指定为一项要求,但安全总是好的。不过,其他两位研究员的建议也能奏效。

pipe stdout stdin

87
推荐指数
4
解决办法
7万
查看次数

我可以将 shell 配置为以不同颜色打印 STDERR 和 STDOUT 吗?

我想设置我的终端,以便stderr以不同的颜色打印stdout;也许是红色的。这样更容易区分两者。

有没有办法在中配置它.bashrc?如果没有,这甚至可能吗?


注意:这个问题是合并另一个是问stderrstdout 和用户输入回波是在输出3种不同颜色。答案可能正在解决任何一个问题。

colors bash terminal stdout stderr

73
推荐指数
4
解决办法
2万
查看次数

立即将 Python 标准输出写入文件

尝试将 Python 脚本中的 stdout 写入文本文件 ( python script.py > log) 时,会在命令启动时创建文本文件,但在 Python 脚本完成之前不会写入实际内容。例如:

脚本.py:

import time
for i in range(10):
    print('bla')
    time.sleep(5)
Run Code Online (Sandbox Code Playgroud)

使用 调用时每 5 秒打印到标准输出python script.py,但是当我调用 时python script.py > log,日志文件的大小保持为零,直到脚本完成。是否可以直接写入日志文件,以便您可以跟踪脚本的进度(例如使用tail)?

编辑事实证明,这样python -u script.py做的技巧,我不知道标准输出的缓冲。

shell python stdout

73
推荐指数
4
解决办法
13万
查看次数

使用echo时如何添加新行

为什么以下命令不会在生成的文件中插入新行,解决方案是什么?

$ echo "Line 1\r\nLine2" >> readme.txt

$ cat readme.txt 
Line 1\r\nLine2
Run Code Online (Sandbox Code Playgroud)

echo stdout

63
推荐指数
4
解决办法
24万
查看次数

更改时输出文件内容

我想在文件更改时输出文件的内容,例如,如果我有文件foobar并且我这样做:

magic_command foobar

当前终端应该显示文件的内容并等到,我不知道,我按 ^C。

然后,如果从另一个终端我做:

echo asdf >> foobar

除了原始文件内容外,第一个终端应该显示新添加的行(当然,考虑到我没有按 ^C)。

terminal tail stdout

60
推荐指数
4
解决办法
8万
查看次数

如何诱使命令认为其输出将发送到终端

给定一个命令,当它的输出到达终端时改变其行为(例如产生彩色输出),如何在保留改变的行为的同时在管道中重定向该输出?必须有一个实用程序,我不知道。

某些命令(例如grep --color=always)具有选项标志来强制执行该行为,但问题是如何解决仅依赖于测试其输出文件描述符的程序。

如果重要的话,我的 shellbash在 Linux 上。

shell pipe utilities stdout pty

55
推荐指数
6
解决办法
1万
查看次数

如何将标准输出发送到剪贴板?

Unix 中是否有允许以下功能的功能:

echo "Some Text" | copy-to-clipboard
Run Code Online (Sandbox Code Playgroud)

command-line clipboard stdout

48
推荐指数
4
解决办法
2万
查看次数

将文件内容输出到标准输出的命令?

我知道cat可以做到这一点,但它的主要目的是连接而不是仅仅显示内容。

我也知道lessand more,但我正在寻找一些简单的(不是寻呼机),它只是将文件的内容输出到终端,并且它是专门为此而制作的,如果有的话。

less cat stdout

40
推荐指数
7
解决办法
7万
查看次数