使用tee命令获取不到输出的解决方案

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

当我们想一边监控一个程序的输出,一边又想将输出记录到一个文件当中的时候,tee命令就是一个非常好的选择

./buffer_demo | tee a.txt

比如上面的命令,将buffer_demo程序的输出打印到屏幕上,同时写入a.txt文件

当buffer_demo持续输出比较多的文本的时候,上面的命令运行的没有什么问题。

但是如果buffer_demo使用的是printf这样的标准io库的函数,并且输出文本速度很慢的时候,我们可能半天也看不到屏幕上有输出。这是因为当你使用管道的时候,标准io库发现stdout是一个管道,于是会启用块缓冲,有时这个缓冲会达到8192字节。

比如buffer_demo程序

#include <stdio.h>
#include <unistd.h>

int main(void) {
    while (1) {
        printf("123\n");
        sleep(1);
    }
    return 0;
}

需要输出很久才能达到一块

当然在拥有源码的情况下我们可以加一个fflush来解决这个问题

比如这样

#include <stdio.h>
#include <unistd.h>

int main(void) {
    while (1) {
        printf("123\n");
        fflush(stdout);
        sleep(1);
    }
    return 0;
}

但是更多数的情况是我们没有源码

这时候我们可以使用expect自带的一个名为unbuffer的工具,像这样,就可以去掉缓存的影响

unbuffer ./buffer_demo | tee a.txt
Cursor生成JAVA相关的关键词提示规则 你是 Java 编程、Spring Boot、Spring Framework、Maven、JUnit 及相关 Java 技术的专家。在项目根目录创建一个.curstorrules文件(注意有个小数点),之后在该文件内填入下面内容。始终遵循 SOLID 原则,保持高内聚低耦合的 Spring Boot 应用设计。Java 和 Spring Boot 使用规范。Spring Boot 具体规范。 阅读详情

相关推荐

华为OD机试双机位C卷-流水线(Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷 流水线,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 流水线。

qq_45776114的博客 2223

python到tee命令没有输出内容

指令 python main.py | tee 2022_5_1_22_08_30.txt 添加上-u的参数。 修改指令为: python -u main.py | tee 2022_5_1_22_08_30.txt -u参数的使用:python命令加上-u(unbuffered)参数后会强制其标准输出也同标准错误一样不通过缓存直接打印到屏幕。 参考: python非常缓慢地将输出发布到tee | 经验摘录 https://qa.1r1g.com/sf/ask/1446980391/ python命

1744

FCP-FineBI模拟试卷.zip

FCP-FineBI模拟试卷.zip

linux发送数据不全,linuxtee发送不完整的数据

你应该使用tee –output-error = exit-nopipe.这会忽略SIGPIPE信号和EPIPE写错误,但仍会因任何其他错误而死亡.tee –output-error = exit-nopipe,就像你的答案中的warn变体一样,当它无法写入至少一个输出时会退出;但它确实将标准输出计为其中之一.你的例子很麻烦,因为它们只是转储head -c10G / dev / zero |的输出...

weixin_35823755的博客 617

Ubuntu 资源暂时不可用

本人在使用Ubuntu系统的时候,经常会遇到资源暂时不可用的情况,虽然问题不大,但是写一下文档,方便以后学习使用 下图就是具体的情况 解决方案: sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock  ...

swiftfake的博客 5659

Linux-Bash Shell中tee命令返回值为0

都是0,而我们的目的是如果这条指令执行成功,则打印success否则打印failed,这不就和我们的诉求相违背了嘛。在工作中,我们常会使用tee命令搭配管道符,将输出的结果添加到log日志中,别问我为什么一定要使用tee搭配管道符,因为我想把输出结果打印到屏幕上的同时,还将输出结果写入log日志中啦!而此时我们需要注意的是,管道符这个东西,如果管道符之后的命令执行时成功的,那么无论之前的指令成功与否,整条指令的结果都是成功,也就是说$?最简单的就是重定向啦,将标准输出和错误输出全部重定向到log日志中!

qq_34116044的博客 490

printk的用法及优先级

这里使用了 printk 来输出信息,而不是 printf!因为在 Linux 内核中没有 printf 这个函数。 printk 相当于 printf 的孪生兄妹, printf运行在用户态, printk 运行在内核态。在内核中想要向控制台输出或显示一些内容,必须使用printk 这个函数。不同之处在于, printk 可以根据日志级别对消息进行分类,一共有 8 个消息级别,这 8 个消息级别...

monkea123的博客 1798

Linux命令tee命令

tee命令的作用就是读取标准输入内容,将读取到的数据写到标准输出和文件。应用场景一就是有时候我们希望操作命令既显示到屏幕又保存到文档,tee命令是我们的不二选择;应用场景二是重复展示输入内容;应用场景三是可以将文件同时复制多份。当然tee命令还可以与其他命令结合使用,组合达到我们期待的效果。

月生的静心苑 1万+

tee命令用法

用途说明 在执行Linux命令时,我们可以把输出重定向到文件中,比如 ls >a.txt,这时我们就不能看到输出了,如果我们既想把输出保存到文件中,又想在屏幕上看到输出内容,就可以使用tee命令了。tee命令读取标准输入,把这些内容同时输出到标准输出和(多个)文件中(read from standard input and write to standard output and fil

TheSamaritan-City 7043

tee命令使用

tee命令使用 man文档 TEE(1) BSD General Commands Manual TEE(1) NAME tee -- pipe fitting SYNOPSIS tee [-ai] [file ...] DESCRIPTION The tee utility copi...

qq_31433709的博客 1131

linux tee命令_Linux tee命令示例

linux tee命令In this article, we shall go through the tee command in Linux. This is commonly used to read the input and write to both the Standard Output (stdout) and to one or more files. 在本文中,我们将介绍Lin...

从零开始的教程世界 4128

linux命令tee,linux tee命令详解

最近在服务器调试东西的,在输出内容的同时也需要把内容输出到一个指定的文件,这个时候tee命令是我们的首选,接下来吾爱编程就为大家介绍一下tee 命令使用详解,有需要的小伙伴可以参考一下:1、简介:tee命令用于将标准输入复制到每个指定文件,并显示到标准输出tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。2、语法:tee[选项]...[文件]...3、参数:-a...

weixin_42517019的博客 1万+

linux tee 命令 输出的同时写入文件

有时候,你会想手动跟踪命令输出内容,同时又想将输出的内容写入文件,确保之后可以用来参考。如果你想寻找这相关的工具,那么恭喜你,Linux 已经有了一个叫做tee命令可以帮助你。 tee命令基于标准输入读取数据,标准输出或文件写入数据。感受下这个命令的语法: tee [OPTION]... [FILE]... 这里是帮助文档的说明: 从标准输入中复制到每一个文件,并输出到标准输...

whatday的专栏 6393

Linux系列】TEE 命令:同时输出到终端和文件

Linux 系统中,tee命令是一个非常实用的工具,它允许用户将数据同时输出到标准输出(通常是终端)和文件。这在很多情况下都非常有用,比如当你需要查看实时输出的同时,也希望将输出保存到文件中以供后续分析。虽然tee非常灵活,但在处理大量数据时,可能会对性能产生影响。如果性能是一个问题,可以考虑使用其他方法,如直接将输出重定向到文件。

CSDN站内信: https://i.csdn.net/#/msg/chat/qyj19920704 3万+

LinuxTee命令实现日志输出

DBA日常在工作中经常碰到如下情况:使用RMAN备份数据库时如果指定log参数,则会导致所有的标准输出和报错信息都定向到日志信息,但是在屏幕上无法再看到任何信息。当然,这不是我们所想要的,因为我们还是需要在标准输出屏幕看到信息才是更加人性化的。那么我们就可以通过Tee命令来实现,语法说明如下: NAME        tee - 读取标准输入并将内容输出到标准输出和文件,RMAN的日志可以

My Technology Workstation 5200

linux命令tee:将信息同时输出到屏幕和文件

如果你在linux下希望将程序或命令运行的信息,在输入到文件的同时,也能够显示在屏幕上,你可以考虑使用tee这个命令。 下图是对这个命令的形象介绍: 上图的解释是:ls -l 的输出重定向到 tee, tee 用于将内容存入file.txt文件,管道符号将内容输出到less命令;上图很像一个大写T,因此该命令tee. 再举一个例子,比如我现在要运行vasp: 1. 如果只希望运行信息

dazhi_100的专栏 3万+

Linuxtee命令

tee命令主要被用来向standout(标准输出流,通常是命令执行窗口)输出的同时也将内容输出到文件,下面是tee的man 信息 read from standard input and write to standard output and files 下面我们通过几个应用场景来熟悉tee命令。 场景1: 如何使用tee命令 tee命令格式是: tee [OPTION]... [FILE]...

简简单单兔呦 6万+

Linux系统之tee命令的基本使用

Linux系统之tee命令的基本使用

jks212454的博客 2042

Linux命令tee—重定向输出到多个文件

Linux命令tee—重定向输出到多个文件 用途说明 在执行Linux命令时,我们可以把输出重定向到文件中,比如 ls >a.txt,这时我们就不能看到输出了,如果我们既想把输出保存到文件中,又想在屏幕上看到输出内容,就可以使用tee命令了。tee命令读取标准输入,把这些内容同时输出到标准输出和(多个)文件中(read from standard input and wr

chenglinhust的专栏 3608
上一篇: linux seq_file机制学习
下一篇: 如何在ubuntu22.04上使用微软精英手柄
LiWang112358
博客等级 码龄17年 100粉丝 · 25原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值