相关疑难解决方法(0)

管道到三通时强制线缓冲标准输出

通常,stdout是行缓冲的.换句话说,只要您的printf参数以换行符结尾,您就可以立即打印该行.使用管道重定向时,这似乎不成立tee.

我有一个C++程序,a它输出字符串,总是被\n终止stdout.

当它由它自己运行时(./a),所有内容都在正确的时间正确打印,正如预期的那样.但是,如果我将它传递给tee(./a | tee output.txt),它会在它退出之前不会打印任何内容,这会使使用的目的失效tee.

我知道我可以通过fflush(stdout)在C++程序中的每次打印操作之后添加一个来修复它.但是有更清洁,更简单的方法吗?例如,是否有一个命令可以运行stdout,即使使用管道也会强行进行行缓冲?

unix buffer stdout pipe tee

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

即时输出重定向,在程序仍在运行时查看文件重定向输出

如果我使用这样的命令:
./ program >> a.txt&
,并且程序是一个长时间运行的命令,那么我只能在程序结束后看到输出.这意味着我无法知道计算是否进展顺利,直到实际停止计算.我希望能够在程序运行时读取文件上的重定向输出.

这类似于打开文件,附加到文件,然后在每次写入后关闭它.如果文件仅在程序结束时关闭,则在程序结束之前不能读取任何数据.我所知道的唯一重定向类似于在程序结束时关闭文件.

你可以用这个小python脚本测试它.语言并不重要.任何写入标准输出的程序都有同样的问题.

l = range(0,100000)
for i in l:
  if i%1000==0:
    print i
  for j in l:
    s = i + j
Run Code Online (Sandbox Code Playgroud)

可以使用以下
命令运行:./ python program.py >> a.txt
然后cat a.txt ..一旦脚本完成计算,您将只获得结果.

linux bash

11
推荐指数
1
解决办法
6753
查看次数

标签 统计

bash ×1

buffer ×1

linux ×1

pipe ×1

stdout ×1

tee ×1

unix ×1