首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在不缓冲stdout和stderr的情况下记录输出

在不缓冲 stdout 和 stderr 的情况下记录输出,可以使用以下方法:

  1. 使用 unbuffer 命令:unbufferexpect 工具的一部分,可以在不缓冲输出的情况下运行命令。在 Linux 系统中,可以使用以下命令安装 expect 工具:
代码语言:txt
复制
sudo apt-get install expect

然后,可以使用以下命令运行程序,以便在不缓冲 stdout 和 stderr 的情况下记录输出:

代码语言:txt
复制
unbuffer command | tee output.log
  1. 使用 script 命令:script 命令可以将终端会话记录到文件中,包括所有未缓冲的输出。在 Linux 系统中,可以使用以下命令启动 script 命令:
代码语言:txt
复制
script output.log

然后,运行程序并在程序完成后退出 script 命令:

代码语言:txt
复制
command
exit
  1. 使用 stdbuf 命令:stdbuf 命令可以更改命令的缓冲设置,以便在不缓冲 stdout 和 stderr 的情况下运行命令。在 Linux 系统中,可以使用以下命令运行程序:
代码语言:txt
复制
stdbuf -oL -eL command | tee output.log

这将使用行缓冲运行命令,并将输出记录到 output.log 文件中。

总之,这些方法都可以在不缓冲 stdout 和 stderr 的情况下记录输出,并且可以根据具体需求选择合适的方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

fprintf函数用法_itoa函数

说明: stdout – 标准输出设备 (printf(“..”)) 同 stdoutstderr – 标准错误输出设备 两者默认向屏幕输出。...在默认情况下stdout是行缓冲,他输出会放在一个buffer里面,只有到换行时候,才会输出到屏幕。...而stderr是无缓冲,会直接输出,举例来说就是printf(stdout, “xxxx”) printf(stdout, “xxxx\n”),前者会憋住,直到遇到新行才会一起输出。...stdout – 标准输出设备 (printf(“..”)) 同 stdoutstderr – 标准错误输出设备 两者默认向屏幕输出。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

97940

标准 IO 库那些事儿

缓冲类型 标准 IO 缓冲主要分为三种类型: 全缓冲,填满缓冲区后才进行实际 IO 操作 行缓冲,在输入输出中遇到换行符或缓冲区满才进行实际 IO 操作 无缓冲,每次都进行实际 IO 操作 对于行缓冲...对于三个预定义标准 IO 流 (stdin/stdout/stderr) 缓冲类型,ISO C 有以下要求: 当且仅当 stdin/stdout 涉及交互式设备时,它们才是全缓冲 stderr...因没有使用 stderr 输出,所以可以验证它初始状态 第二部分验证 setbuf 调用 stdout缓冲 stderr/stdin 全缓冲 第三部分验证 setvbuf 调用 stderr...结果就不太一样了,缓冲区地址大小均未改变,仅缓冲类型发生变更 setvbuf 设置 stdout缓冲、设置 stderr缓冲不带 buf (NULL) 0 size 结果同上,缓冲区地址大小均未改变...不过发现缓冲类型和缓冲区 buffer 确实起作用了: 设置为全缓冲流 fprintf 不会立即输出,需要使用 fflush 冲洗一下 由于 stdout stderr 使用了一块缓冲区,同样信息会被分别输出一次

1.5K20
  • python中subprocess

    python2.7 源码中注释(由于能力有限,翻译不太准确): 这个模块允许您开启进程、连接输入、输出错误管道,并获取他们返回代码。...这个模块计划替代一些旧代码,: os.system、os.spawn*、os.Popen、popen2.* 、commands.* 关于subprocess模块可以用来取代这些模块功能在下面可以找到...一个负bufsize意味着使用这个系统默认情况下,这通常意味着完全缓冲。默认值为bufsize是0(无缓冲)。 stdin、stdoutstderr分别指定执行程序标准输入,标准输出标准错误。...CalledProcessError对象将有返回代码在returncode属性输出在output属性     这些参数相对于Popen构造函数是相同。    ...这个属性是提供输入到子进程一个文件对象,否则为None stdout     如果stdout参数是PIPE , 这个属性是提供输出到子进程一个文件对象,否则为None stderr      如果stderr

    1.6K30

    使用setvbuf更改printf默认buffer 行为

    参考链接: C++ setvbuf() 有3种buffer行为,“缓冲”,“基于块缓冲“基于行缓冲”。...stdout(printf)默认是基于行缓冲,即写到stdout字符都会被缓冲起来直到一个换行符输出时候,这些字符才会被打印出来;标准错误输出stderr默认是缓冲,即写到stderr字符会马上被打印出来...前面提到stdout(printf)是“基于行缓冲”,我们在“Hello World!”后加一个换行“\n”试试。...换行输出,如下: Hello World! Hello World! Hello World! Hello World!      ...基于stdoutstderr缓冲行为,如果我们在调试问题打印输出时候想马上看到输出结果,可以将stdoutline buffered修改为unbuffered,或者使用fprintf(stderr

    1.5K20

    python 标准类库-并行执行之subprocess-子进程管理

    subprocess.STDOUT 可用于Popen函数stdin,stdout或者stderr参数指特定值,表示标准错误信息必须一起写入同样句柄,比如标准输出。...stdin, stdoutstderr分别指明了被执行程序标准输入,标准输出标准错误处理文件句柄。可选值PIPE,DEVNULL,已存在文件描述符(一个正整数),已存在文件对象,None。...,缓冲大小给定正数大致相等。...stdin, stdout stderr 分别指定被执行程序标准输入,标准输出,标准错误文件句柄。...警告 当使用stdout=PIPE and/or stderr=PIPE时,如果子进程生成足够输出到管道,这会阻止操作系统管道缓冲区接收更多数据,进而造成死锁。

    4.1K20

    python模块之subprocess类与常量

    stdin, stdout, stderr参数特殊值,意味着使用管道重定向输入输出 subprocess.STDOUT:可传递给stderr参数特殊值,表示重定向标准错误到标准输出 Popen 在一个新进程中执行子程序...0:始用缓冲 1:使用行缓冲 其他正整数:缓冲大小 负整数(默认):使用系统默认值 executable:使用shell=True场景很少。...除此之外,stderr还可以是STDOUT,表示标准错误输出重定向到标准输出。 preexec_fn:限于POSIX系统,设置一个可调用对象,先于子进程中程序执行。...但如果指定了encoding/errors或者text为True,将使用指定encodingerrors以文本模式打开stdin/stdout/stderr。...类似的,返回tuple如果希望是非None,需要设置stdout=PIPE/或stderr=PIPE。

    2.5K10

    使用python执行shell脚本 并动态传参 及subprocess使用详解

    ,并且控制其输入输出 Class Popen(args,bufsize = 0,executable=None, stdin =None,stdout =None,stderr =None,...负bufsize意味着使用系统默认值,通常意味着完全缓冲。bufsize默认值是0(无缓冲)。 stdin,stdoutstderr分别指定执行程序标准输入,标准输出标准错误文件句柄。...另外,stderr 可以是STDOUT,它表示应用程序stderr数据应该被捕获到与stdout相同文件句柄中。...在Popen对象中,可以设值subprocess.stdout=PIPE 即通过管道 p.stdout.read()取出 该进程标准输出 preexec_fn 如果将preexec_fn设置为可调用对象...此外,文件对象stdout,stdinstderrnewlines属性不会被communications()方法更新。

    5.5K30

    认真理一理这些奇怪缓冲问题

    缓冲相关函数 我们知道标准错误永远是无缓冲。当标准输入输出指向是交互式设备(终端)时候,它们是行缓冲。若不是则是全缓冲。 那么这些默认缓冲类型如何修改?...通过设置stdout(标准输出第二个参数为NULL,将其变成了不带缓冲,因此你运行后发现,printf打印会立即显示在终端。...linux下标准错误输出默认是缓冲,来看一个例子: #include #include int main(int argc, char const *argv...[]) { //setbuf(stdout,NULL); fputs("hello", stderr); sleep(); fputs("程序猿编码", stderr)...控制文件I/O内核缓冲 在某些情况下,我们可能需要强制将内核缓冲区内数据刷新至磁盘,而不必等待内核线程等待特定时间后才写入。

    1K20

    初识Linux · 重定向和缓冲区(续)

    并且本文会加深一下缓冲理解重定向理解。 那么话不多说,进入正题吧。...数组里面写入\n,我们看到结果就是log.txt里面是等程序运行完,也就是进程终止之后,强制刷新缓冲区,从而导致数据刷新出来: 这个点从另一个点,告诉了我们用户级别,也就是语言层面的缓冲存在。...由一个问题引出: 平时我们使用都是stdin stdout偏多,对于stderr,我们只知道它错误有关,那么具体表现是什么呢?我们现在看看。...I am stderr\n"); return 0; } 此时结果居然还是一样,难道stderrstdout就没有区别了吗? 并不是,我们试试重定向?...其实靠就是stdin stdout stderror,如果没有报错什么stdout stderr用法基本上是一样,但是如果有报错信息,我们无法将报错信息重定向到log.txt,这是因为>真正名称叫做标准输出重定向符

    10110

    python之系统命令

    commands.getoutput('cmd') result = commands.getstatus('cmd') result = commands.getstatusoutput('cmd') 以上执行shell命令相关模块函数功能均在...用于执行复杂系统命令 参数: args:shell命令,可以是字符串或者序列类型(:list,元组) bufsize:指定缓冲。...0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲 stdin, stdout, stderr:分别表示程序标准输入、输出、错误句柄 preexec_fn:只在Unix平台下有效,用于指定一个可执行对象...所以不能将close_fds设置为True同时重定向子进程标准输入、输出与错误(stdin, stdout, stderr)。...subprocess.Popen("mkdir t2", shell=True) 终端输入命令分为两种: 输入即可得到输出:ifconfig 输入进行某环境,依赖再输入,:python import

    1.1K40

    Python 执行系统命令

    该方法有以下参数 参数 作用 args 一般是一个字符串,是要执行shell命令内容 bufsize 设置缓冲,负数表示系统默认缓冲,0表示无缓冲,正数表示自定义缓冲行数 stdin 程序标准输入句柄...,NONE表示不进行重定向,继承父进程,PIPE表示创建管道 stdout 程序标准输出句柄,参数意义同上 stderr 程序标准错误句柄,参数意义同上,特殊,可以设置成STDOUT,表示与标准输出一致...向stdin发送数据,或从stdoutstderr中读取数据。可选参数input指定发送到子进程参数。Communicate()返回一个元组:(stdoutdata, stderrdata)。...同样,如果希望从stdoutstderr获取数据,必须将stdoutstderr设置为PIPE。 4、Popen.send_signal(signal):向子进程发送信号。...run默认不会返回输出,只返回命令执行状态。

    1.7K10

    python笔记65 - Python3 subprocess执行命令行获取返回结果

    常用参数: args: shell命令,可以是字符串或者序列类型(: str, list,元组) bufsize: 缓冲区大小。 当创建标准流管道对象时使用,默认-1。...0: 不使用缓冲区 1: 表示行缓冲,仅当universal_newlines=True时可用,也就是文本模式 正数: 表示缓冲区大小 负数: 表示使用系统默认缓冲区大小。...stdin, stdout, stderr: 分别表示程序标准输入、输出、错误句柄 preexec_fn: 只在 Unix 平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用...stderr=subprocess.STDOUT, encoding='utf-8' ) # 输出stdout print...stdout=subprocess.PIPE, stderr=subprocess.STDOUT, ) # 输出stdout

    8.9K20

    1、git bash 获取分支信息

    请看下文 2、JavaScript 通过 execa 插件获取项目分支信息 execa具备如下特点: Promise接口 从输出中删除最后换行符,这样您就不必执行stdout.trim() 支持跨平台...更高最大缓冲区。100mb而不是200kb。 按名称执行本地安装二进制文件。 在父进程终止时清除派生进程。 从 stdoutstderr获得交错输出,类似于在终端上打印输出。...(异步) 可以指定文件参数作为一个单一字符串没有外壳 更具描述性错误。..., failed: false, timedOut: false, isCanceled: false, killed: false }*/ execa还可以执行脚本命令,并输出结果,下面看一下如何在代码里面获取当前操作分支...: 'git rev-parse --abbrev-ref HEAD', exitCode: 0, stdout: 'master', # 命令执行结果输出 stderr: '', failed

    1.2K20

    python中执行DOS命令3种方法小

    在windows平台下,默认shell由COMSPEC环境变量来指定。 参数stdin, stdout, stderr分别表示程序标准输入、输出、错误句柄。...我们不能将close_fds设置为True同时重定向子进程标准输入、输出与错误(stdin, stdout, stderr)。 如果参数shell设为true,程序将通过shell来执行。...subprocess.STDOUT 创建Popen对象时,用于初始化stderr参数,表示将错误通过标准输出输出。 Popen方法: Popen.poll()  用于检查子进程是否已经结束。...向stdin发送数据,或从stdoutstderr中读取数据。可选参数input指定发送到子进程参数。 Communicate()返回一个元组:(stdoutdata, stderrdata)。...同样, 果希望从stdoutstderr获取数据,必须将stdoutstderr设置为PIPE。 Popen.send_signal(signal)  向子进程发送信号。

    2.2K20

    matlabfprintf用法_matlab中compose函数

    jhua.org 但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。...在默认情况下stdout是行缓冲,他输出会放在一个buffer里面,只有到换行时候,才会输出到屏幕。...而stderr是无缓冲,会直接输出,举例来说就是printf(stdout, “xxxx”) printf(stdout, “xxxx\n”),前者会憋住,直到遇到新行才会一起输出。...https://www.jhua.org 但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    39510

    python中执行shell命令几个方

    但是无法读取程序执行返回值) 适用于Python2 尝试第三种方案 commands.getstatusoutput() 一个方法就可以获得到返回值输出,非常好用。...shell命令,可以是字符串或者序列类型(:list,元组) bufsize 指定缓冲。...0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲 stdin, stdout, stderr 分别表示程序标准输入、输出、错误句柄 preexec_fn 只在Unix平台下有效,...所以不能将close_fds设置为True同时重定向子进程标准输入、输出与错误(stdin, stdout, stderr)。...","t1"]) ret2 = subprocess.Popen("mkdir t2", shell=True) 终端输入命令分为两种: 输入即可得到输出:ifconfig 输入进行某环境,依赖再输入

    3K10

    C++中fflush()函数与rewind()函数

    1 stdin 与stdin一起使用还有stdoutstderr,这三个变量都是FILE结构指针,在stdio.h头文件中定义。...stdin是标准输入流;stdout是标准输入流;stderr是标准错误流。默认情况下,stdin从键盘中读取数据,而stdoutstderr将信息在显示器中显示。...2 fflush()函数 该函数作用是清空在“1 stdin”中提到三种流。 2.1 强制显示输出缓冲区 fflush(stdout); 以上代码功能是将与输出流关联缓冲内容在屏幕上显示。...printf(“Hello World”); fflush(stdout); 2.2 清空输入缓冲区 fflush(stdin); 以上代码功能是清空输入缓冲区中内容。...该代码用在scanf()函数之前,用于屏蔽输入缓冲区中回车符号。

    96700

    【linux】进度条

    01.屏幕缓冲区 屏幕缓冲区是指在输出设备(终端或控制台)之前,数据被存储内存区域。应用程序将输出数据写入这个缓冲区,然后系统统一将缓冲内容刷新到屏幕上。...行缓冲模式(Line Buffered): 当遇到换行字符(LF, \n)时,缓冲区内容会被刷新到屏幕上。常见于终端I/O。 一些标准输出流(stdout)在连接到终端时默认使用行缓冲模式。...无缓冲模式(Unbuffered): 数据每次写入缓冲区后立即被刷新到屏幕上。适用于需要实时输出场景,错误输出流(stderr)通常是无缓冲。...如果你希望在没有换行符情况下立即刷新输出缓冲区,可以在 printf 后调用 fflush(stdout): 修改后代码块2: #include #include <unistd.h...使用 \n 或 fflush(stdout) 确保输出立即可见,尤其是在待运行一段时间代码( sleep())之后进行输出时。

    7110
    领券