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

1K40
  • 标准 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、stdout和stderr分别指定执行程序的标准输入,标准输出和标准错误。...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!      ...基于stdout和stderr的缓冲行为,如果我们在调试问题打印输出的时候想马上看到输出结果,可以将stdout的line buffered修改为unbuffered,或者使用fprintf(stderr

    1.5K20

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

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

    4.2K20

    python模块之subprocess类与常量

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

    2.5K10

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

    与缓冲相关的函数 我们知道标准错误永远是无缓冲的。当标准输入输出指向的是交互式设备(如终端)的时候,它们是行缓冲的。若不是则是全缓冲的。 那么这些默认的缓冲类型如何修改?...通过设置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; } 此时结果居然还是一样的,难道stderr和stdout就没有区别了吗? 并不是,我们试试重定向?...其实靠的就是stdin stdout stderror,如果没有报错什么的,stdout stderr的用法基本上是一样的,但是如果有报错信息,我们无法将报错信息重定向到log.txt,这是因为>的真正名称叫做标准输出重定向符

    11910

    【Linux】重定向与缓冲区

    让标准输出重定向到文件 dup2 最常见的用途之一是 重定向标准输入 (stdin)、标准输出 (stdout) 或标准错误 (stderr),通常用于日志文件、命令行工具或守护进程。...缓冲区的分类 缓冲区可以按作用场景分为多种类型: 缓冲区类型 作用 用户态(应用层)缓冲区 C 标准库 stdio 缓冲区(如 stdout、stdin),减少 write() 调用,提高性能 内核态缓冲区...C 语言的 stdio(stdout, stdin, stderr)在不同情况下有不同的缓冲模式: 缓冲模式 触发时机 应用场景 全缓冲(Fully Buffered) 缓冲区满了时 或 fflush...(stdout); 文件 I/O 行缓冲(Line Buffered) 遇到 \n 时自动刷新 终端交互(如 stdout) 无缓冲(Unbuffered) 每次 printf() 都直接写入 stderr...重点: C 语言的 stdout 缓冲区和 Linux Page Cache 是两层不同的缓冲区,fflush(stdout); 只能刷新 stdout,但不会保证数据写入磁盘,需要 fsync(fd

    5710

    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发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。Communicate()返回一个元组:(stdoutdata, stderrdata)。...同样,如果希望从stdout和stderr获取数据,必须将stdout和stderr设置为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

    9.3K20

    1、git bash 获取分支信息

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

    1.2K20

    Linux基础IO全面介绍

    count 不同的数 fwrite 函数传入内容的大小正好是 size_t size, 和 size_t count 的乘积 stdin & stdout & stderr 任何 C 程序,都默认打开三个文件分别叫做标准输入...(stdin)、标准输出(stdout)、标准错误(stderr) 标准输入(stdin)——键盘文件——读方法(read) 标准输出(stdout)、标准错误(stderr)——显示器文件——写方法(...stdout、stderr 进行读写 C 默认会打开三个输入输出流,分别是 stdin, stdout, stderr, 这样做便于语言进行上手使用,都有输入输出的需求 几乎所有的编程语言都会默认会打开三个输入输出流...只要拿着文件描述符,就可以找到对应的文件 补充: 标准输入、标准输出、标准错误在对应的文件描述符为 0,1,2,对应 C 语言层上的是 stdin、stdout、stderr 所有文件,如果要被使用时,...内核把文件信息记录到其中。 2.存储数据 ——该文件需要存储在三个磁盘块,内核找到了三个空闲块。将内核缓冲区数据缓冲到磁盘的数据区中 3.记录分配情况——文件内容按顺序存放(数据块)。

    40640

    matlabfprintf用法_matlab中compose函数

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

    40110

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

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

    98400

    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
    领券