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 命令行工具
每月 75 次下载
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