tee从标准输入读取并写入标准输出和文件.
some_command |& tee log
Run Code Online (Sandbox Code Playgroud)
是否可以将tee写入压缩文件?
some_command |& tee -some_option log.bz2
Run Code Online (Sandbox Code Playgroud)
如果发球台不能那样做,还有其他命令吗?
我可以将输出重定向到压缩文件
some_command |& bzip2 > log.bz2
Run Code Online (Sandbox Code Playgroud)
但是使用此命令,缺少输出到标准输出.
我试图将 stdout 和 stderr 中的所有内容记录到日志文件中,并仍然保留控制台。为此,我只是将:附加|& tee -a log_file.log到每个命令中。
但是,如果脚本期间发生任何错误,我还想运行自定义命令。为此,我在脚本的开头添加了以下内容:trap "echo Non-zero exit code detected" ERR。
问题是通过使用管道运算符,陷阱中的回显不再执行。
脚本 1,不带管道:
$cat test.sh
#!/bin/bash
trap "echo Non-zero exit code detected!" ERR
function fail_please()
{
echo "Returning non-zero exit code!"
return 1
}
fail_please
Run Code Online (Sandbox Code Playgroud)
输出1:
$ ./test.sh
Returning non-zero exit code!
Non-zero exit code detected!
Run Code Online (Sandbox Code Playgroud)
脚本 2,带管道:
$ cat test.sh
#!/bin/bash
trap "echo Non-zero exit code detected!" ERR
function fail_please()
{
echo "Returning non-zero exit code!"
return 1
}
fail_please …Run Code Online (Sandbox Code Playgroud) 当我在Bash中发出两个等效命令时,我得到了不同的输出(来自"wc -l"命令),见下文:
root@devel:~# ls /usr/bin -lha | tee >(wc -l) >(head) > /dev/null
total 76M
drwxr-xr-x 2 root root 20K Nov 11 18:58 .
drwxr-xr-x 10 root root 4.0K Oct 8 15:31 ..
-rwxr-xr-x 1 root root 51K Feb 22 2017 [
-rwxr-xr-x 1 root root 96 Jan 19 2017 2to3-3.5
-rwxr-xr-x 1 root root 23K Mar 22 2017 addpart
lrwxrwxrwx 1 root root 26 May 10 2017 addr2line -> x86_64-linux-gnu- addr2line
lrwxrwxrwx 1 root root 6 Dec 13 2016 …Run Code Online (Sandbox Code Playgroud) 我需要将 stdout 重定向到控制台,并将 stdout 和 stderr 重定向到文件。这需要在 shell 脚本内完成。我发现下面的代码可以重定向到控制台和日志文件,现在我需要将 stderr 删除到控制台。
exec > >(tee -i "output.log") 2>&1
Run Code Online (Sandbox Code Playgroud)
你能帮我一下吗?
tee我必须在 Linux 上用 C语言模拟该命令。内部如何tee运作?看起来像T型管,那我应该用管子吗?有没有特殊的管子?
我正在尝试开发一个程序来播放和录制一些 rtmp 流。该程序是用Qt开发的。
我正在使用 rtmpdump 和 mplayer。由于两者都在单独的进程中运行,因此我使用 fifo 将流从 rtmpdump 传递到 mplayer。我需要单独的进程,因为 mplayer 需要由用户控制。所以 mplayer 在从属模式下运行。
这对于播放流来说效果很好。
现在我想将流录制到另一个文件。我知道我可以使用 mplayer 来做到这一点。但使用单个 mplayer 是不可能的,因为它仅支持播放或录制。于是想到使用tee命令来分割流,使用2个mplayer进程,一个用于录制,一个用于播放。
现在溪流像这样流动
rtmpdump | tee fifo_for_playing fifo_for recording
Run Code Online (Sandbox Code Playgroud)
一个 mplayer 正在读取 fifo_for_playing,另一个 mplayer 正在读取 fifo_for_recording。
现在的问题是,由于 mplayer 应该记录,只有当用户按下记录按钮时才会启动,fifo_for_recording 将阻塞 tee,因为它没有打开。所以玩也不会开始。
有人可以提出解决方案或更好的方法来实现这一目标吗?我想做的是使用非阻塞 fifo 进行发球。因此,即使没有打开一个fifo进行读取,它也不会阻塞tee。
更新:向下滚动到编辑部分 (4) 以获得几乎完全可用的版本。还删除了编辑部分 (1),因为否则这篇文章太长了,这可能是最没有帮助的部分。最初在编辑部分 (1) 中的链接如下。
如何将 sys.stdout 复制到 python 中的日志文件?
在这里搜索了很长时间,但第一次提问。
解释:
我需要将打印重定向到日志,因为我通过使用打印语句记录消息的系统调用来合并 C 代码。还有一堆由我的同事编写的旧 Python 代码被调用,它们也使用打印语句进行调试。
最终,我希望它能够为我更新的代码处理 logging.info('message'),但也能够通过内置的日志模块为我无法更改或根本没有的代码重定向打印语句'还没来得及更新。
下面是我想出的一些示例代码来简洁地演示我的问题。
问题:
我的代码:
编辑:最初是 setuplog.Tee。init包含if os.path.exists(LOGNAME): os.remove(LOGNAME). 这已被删除并放入 base.py。
安装日志.py:
#!/usr/bin/python
import sys
import os
import logging
import logging.config
LOGNAME = 'log.txt'
CONFIG = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'simple': {
'format': '%(module)s:%(thread)d: %(message)s'
},
},
'handlers': {
'console': {
'level': 'NOTSET',
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'file': { …Run Code Online (Sandbox Code Playgroud) 我在 crontab 中放置了一个作业,每 2 小时运行一次,我还希望将 bash 输出的日志文件放在一个单独的文件中。
输入:
0 0-23/2 * * * /tmp/sample.sh | tee /tmp/logfile_extract_$(date '+%Y-%m-%d-%H').txt
Run Code Online (Sandbox Code Playgroud)
输出:
/bin/sh: -c: line 0: unexpected EOF while looking for matching `''
/bin/sh: -c: line 1: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud) 我正在处理一个文本文件,其中包含由 xargs 生成的多个并行进程。我还需要将每个进程的标准输出捕获到单独的日志文件中。下面是一个示例,其中每个进程的输出被交错到一个文件中——这不是我想要的。
理想情况下,每个日志文件应按文件行号进行编号,即 logfile-1、logfile-2 等。
cat inputfile.txt | xargs -n 1 -P 8 ./myScript.sh | tee logfile
Run Code Online (Sandbox Code Playgroud)
如果可能的话,最好避免使用外部包装器脚本,但如果有一种方法可以用此处文档包装 myScript,那就行了。
我想从 directshow 设备(如网络摄像头)捕获视频+音频并将其流式传输到 RTMP 服务器。这部分没问题。但问题是我希望能够看到它的预览。经过大量搜索后,有人说使用 tee muxer 将输入传输到 ffplay。但我无法让它发挥作用。这是我的流式传输到 rtmp 服务器的代码。我应该如何改变它?
\n\nffmpeg -rtbufsize 8196k -framerate 25 -f dshow -i video="Microsoft\xc2\xae LifeCam Studio(TM)":audio="Desktop Microphone (Microsoft\xc2\xae LifeCam Studio(TM))" -vcodec libx264 -acodec aac -strict -2 -b:v 1024k -b:a 128k -ar 48000 -s 720x576 -f flv "rtmp://ip-address-of-my-server/live/out"\nRun Code Online (Sandbox Code Playgroud)\n