#时间戳 #过滤器 #工具 #CLI

bin+lib rtss

一个用于在 stdout/stderr 上添加经过时间的命令行工具

5 个不稳定版本

0.6.2 2021年10月14日
0.6.1 2020年11月29日
0.6.0 2018年5月16日
0.5.0 2018年4月28日
0.3.0 2018年4月27日

#1164 in 命令行工具

Download history 14/week @ 2024-03-11 23/week @ 2024-04-01 6/week @ 2024-04-08 6/week @ 2024-04-22 4/week @ 2024-05-13 23/week @ 2024-05-27 17/week @ 2024-06-03 24/week @ 2024-06-10 14/week @ 2024-06-17 16/week @ 2024-06-24

每月 75 次下载

MIT 许可证

17KB
288

rtss — 物品的相关时间戳

rtss 在其输出中添加连续行之间的相对持续时间和自程序开始以来的持续时间。

它可以用作管道中的过滤器

-% cargo build --release 2>&1 | rtss
 274.1ms  274.1ms |    Compiling libc v0.2.40
   1.50s    1.22s |    Compiling memchr v2.0.1
   2.28s  780.8ms |    Compiling rtss v0.5.0 (file:///home/freaky/code/rtss)
   5.18s    2.90s |     Finished release [optimized] target(s) in 5.17 secs
   5.18s    exit code: 0

它还可以直接运行命令,将持续时间添加到 stdout 和 stderr。stdin 传递给子进程,其退出代码将成为 rtss 的退出代码

-% rtss sh -c "echo foo; echo bar; sleep 1; echo moo >&2; sleep 1; echo baz; exit 64"
   1.7ms    1.7ms | foo
   1.7ms          | bar
   1.00s    1.00s # moo
   2.03s    2.03s | baz
   2.03s    exit code: 64
zsh: exit 64    rtss sh -c

-% rtss sh -c "echo foo; echo bar; sleep 1; echo moo >&2; sleep 1; echo baz; exit 64" 2>/dev/null
   1.9ms    1.9ms | foo
   1.9ms          | bar
   2.05s    2.04s | baz
   2.05s    exit code: 64
zsh: exit 64    rtss sh -c  2> /dev/null

空白持续时间表示行是在单个 read() 中读取的。行持续时间是按描述符计算的,因此 stderr 和 stdout 有它们自己的独立持续时间。

可以使用 -s / --sortable 请求适合管道到 sort -k2 的输出

-% rtss --sortable sh -c "echo foo; echo bar; sleep 1; echo moo >&2; sleep 1; echo baz; exit 64"
00:00:00.001652 00:00:00.001652 | foo
00:00:00.001652 00:00:00.000000 | bar
00:00:01.007287 00:00:01.007287 # moo
00:00:02.071962 00:00:02.070309 | baz
00:00:02.072185    exit code: 64

PTY 模式

对于将输出缓冲或以其他方式更改其行为的程序,在支持的平台上,--pty(又称 --tty)选项将在伪终端下运行命令。

-% rtss zpool status 5
  10.01s   10.01s |   pool: rpool
  10.01s          |  state: ONLINE
  10.01s          |   scan: scrub repaired 0 in 1h7m with 0 errors on Wed May  2 04:00:38 2018

-% rtss --pty zpool status 5
   4.2ms    4.2ms |   pool: rpool
   4.2ms          |  state: ONLINE
   4.5ms    0.3ms |   scan: scrub repaired 0 in 1h7m with 0 errors on Wed May  2 04:00:38 2018

API

rtss 的后端作为库提供,用于在其他程序中使用。这包括

  • RtssWriter — 一个 io::Write 包装器和实现,转发 write() 调用并注释换行符。
  • DurationExt — 扩展 Duration 以包含 write_human()write_sortable()human_string()sortable_string() 方法。
  • line_timing_copy() — 将一个 io::Write 封装在 RtssWriter<BufWriter<W>> 中,并调用其上的 io::copy() 函数以及提供的 io::Read
use std::io::{self, Write};
use std::time::{Duration, Instant};

extern crate rtss;
use rtss::{RtssWriter, DurationExt};

fn main() -> io::Result<()> {
    let mut writer = RtssWriter::new(io::stdout(), Duration::human_string, '|', Instant::now());
    writer.write(b"Hello!\n")?;
    writer.write(b"World!\n")?;
    Ok(())
}

输出

   0.2μs    0.2μs | Hello!
  84.7μs   84.6μs | World!

安装

如果您已安装Cargo,可以使用以下命令安装最新版本:

cargo install rtss

您也可以使用以下命令安装最新版本:

cargo install --git https://github.com/Freaky/rtss.git

或者,您也可以在不安装的情况下手动克隆和构建

git clone https://github.com/Freaky/rtss.git &&
cd rtss &&
cargo build --release &&
target/release/rtss echo It works

替代方案

rtss 受Kevin Burke的 tss 启发。

两者基本上是 moreutils 中的 ts 的更时尚版本。

依赖关系

~170–355KB