不输出到 STDOUT 的程序的管道输出

Posted

技术标签:

【中文标题】不输出到 STDOUT 的程序的管道输出【英文标题】:piping output from programs that do not output to STDOUT 【发布时间】:2011-02-02 16:10:53 【问题描述】:

假设我有一个程序输出到由(必需)参数提供的文件:

./foo -o bar.txt

有什么办法可以欺骗它输出到管道?这只是输出到一个名为 - 的文件。

./foo -o - | less

【问题讨论】:

- 作为标准输出(或标准输入)的别名是您的应用程序可能会或可能不会遵守的约定。它在shell中没有任何特殊含义。 【参考方案1】:

你可以使用/dev/stdout作为文件名:

./foo -o /dev/stdout | less

【讨论】:

【参考方案2】:

随着文件的增长,这会将 bar.txt 的内容提供给 filter

tail -f bar.txt | filter

【讨论】:

如果它是从另一个终端运行或原始进程在后台运行。【参考方案3】:

其他解决方案,创建命名管道:

mkfifo /tmp/myfifo; ./foo -o /tmp/myfifo
</tmp/myfifo cat -

【讨论】:

以上是关于不输出到 STDOUT 的程序的管道输出的主要内容,如果未能解决你的问题,请参考以下文章

在管道中强制标准输出的行缓冲

命令输出(stdout,stderr)未重定向到管道

初学Linux之标准I/O和管道

PostgreSQL COPY 管道输出到 gzip 然后到 STDOUT

管道输出subprocess.Popen到文件

标准io和管道