htop 输出到人类可读文件
Posted
技术标签:
【中文标题】htop 输出到人类可读文件【英文标题】:htop output to human readable file 【发布时间】:2013-07-06 06:07:02 【问题描述】:我尝试将htop
传递到文本文件(例如htop > text.txt
),但它给我的文本因格式化字符串而乱码(见下文)。有没有办法获得更好的、人类可读的输出?
^[7^[[?47h^[[1;30r^[[m^[[4l^[[?1h^[=^[[m^[[?1000h^[[m^[[m^[[H^[[2J^[[1B ^[[36m1 ^[[m^[[1m[^[[m^[[32m||||||||||^[[31m||||||||||^[[30m^[[1m \
22.2%^[[m]^[[m ^[[36mTasks: ^[[1m159^[[m^[[36m total, ^[[32m^[[1m5^[[m^[[36m running^[[3;3H2 ^[[m^[[1m[^[[30m \
0.0%^[[m]^[[m ^[[36mLoad average: ^[[30m^[[1m1.11 ^[[m^[[m1.28 ^[[1m1.31 ^[[4;3H^[[m^[[36m3 ^[[m^[[1m[^[[m^[[32m||||||||||^[[30m^[[1m \
11.1%^[[m]^[[m ^[[36mUptime: ^[[1m9 days, 22:04:51^[[5;3H^[[m^[[36m4 ^[[m^[[1m[^[[30m 0.0\
%^[[m]^[[6;3H^[[m^[[36m5 ^[[m^[[1m[^[[m^[[31m||||||||||^[[30m^[[1m 11.1%^[[m]^[[7;3H^[[m^[[36m6 ^[[m^[[1m[^[[30m \
【问题讨论】:
【参考方案1】:htop 作者在这里。
不,没有“好”的方法可以将 htop 的输出通过管道传输到文件中。它是一个交互式应用程序,并使用终端重绘例程来生成其界面(因此,将其通过管道传递与将 vim 传递到文本文件一样有意义——您会得到类似的结果)。
要以文本格式获取有关您的进程的信息,请使用“ps”。例如,ps auxf > file.txt
为您提供了许多易于解析的信息(或ps aux
,如果您不希望使用树格式 - 请参阅man ps
了解更多选项)。
【讨论】:
感谢您的回复。我特别想找到每个处理器的使用情况——htop 做得很好。有没有办法通过ps
访问它?
thanx,但是人会导出到某个文件以使东西更有用
+1 Hi Hisham,htop 没有开关 -b :),我想以这种方式使用它来输出没有菜单行:htop -b |啊哈——黑色
htop 显示内核中 CPU 核心支出的大致百分比(例如红色)。这是ps无法提供的。因此,最好将 htop 转储到文件中。【参考方案2】:
htop 输出ANSI escape code 以使用颜色并在终端周围移动光标。有一个很棒的命令行程序 aha 可以用来将 ANSI 转换为 html。
Ubuntu/Debian 安装
apt-get install aha
将 htop 输出保存为 HTML 文件
echo q | htop | aha --black --line-fix > htop.html
【讨论】:
有关使用 ansi2html.sh 的示例,请参阅news.ycombinator.com/item?id=10323333 并链接有一个功能请求,以向 htop 添加 -b 选项以简化批处理 为什么我们一开始就需要echo q
?尝试不这样做,并在文件末尾获得额外的文本。更新:退出htop
对吗?【参考方案3】:
我也有同样的需求,最终使用 top
而不是 htop
a is 通过 -b
标志提供批处理模式。
-b : 批处理模式操作 在“批处理模式”中启动顶部,这对于将输出从顶部发送到其他程序或文件可能很有用。在这种模式下,top 将不接受输入并运行,直到您使用 '-n' 命令行选项设置的迭代限制或直到被杀死。
例如:
top -b -n 1
希望这会有所帮助,即使这不是使用htop
。
【讨论】:
【参考方案4】:此命令输出纯文本。 (需要安装aha
和html2text
。)
echo q | htop -C | aha --line-fix | html2text -width 999 |
grep -v "F1Help\|xml version=" > file.txt
【讨论】:
这和***.com/a/30224271/230468有什么不同? @DilithiumMatrix 这会给你带来干净的文本,没有任何 html 标签。 @DilithiumMatrix 忘记添加输出命令。马上编辑。你试过了吗?这是你需要的吗? :)【参考方案5】:您还可以在运行 htop 之前使用脚本,以将时间重定向到文件以供以后播放。在“另一种解决方法”和“适合展示和讲述”领域。
script -t -a /var/tmp/script.htop.out 2> /var/tmp/script.htop.out.timings
htop
然后播放
scriptreplay /var/tmp/script.htop.out.timings /var/tmp/script.htop.out
【讨论】:
【参考方案6】:先安装recode,再编码成utf-8:
$htop | recode utf-8 > test.txt
然后 cat 文件,你应该很好。
【讨论】:
可能是一种很好的解决方法,但是当我尝试它时,它无法获取所有进程列表,并且总是只显示一个子集,而不是获取信息的可靠方法。跨度> 【参考方案7】:根据前面的回答,我建议使用 python 做一些后期处理。代码如下:
首先,我们从 htop 获取文本:
echo q | htop -C > a.txt
然后,我们使用 python 使其可读:
import re
htop = open("a.txt").read()
print(re.sub(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])', "", re.sub(r"\x1b\[\d\d;\dH|\x1b\[\d;3H", "\n", '\n'.join(htop)))[9:])
结果如下:
1 [ 0.0%] Tasks: 11, 38 thr; 1 running
2 [ 0.0%] Load average: 0.38 0.26 0.11
3 [ 0.0%] Uptime: 01:19:50
4 [ 0.0%]
Mem[|#**** 700M/25.5G]
Swp[ 0K/0K]
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
51 root 20 0 359M 62880 33428 S 0.0 0.2 0:00.00 /tools/node/bin
52 root20 0 359M 62880 33428 S 0.0 0.2 0:00.21 /tools/node/bin
53 root20 0 359M 62880 33428 S 0.0 0.2 0:00.19 /tools/node/bin
54 root20 0 359M 62880 33428 S 0.0 0.2 0:00.16 /tools/node/bin
55 root20 0 359M 62880 33428 S 0.0 0.2 0:00.15 /tools/node/bin
56 root20 0 359M 62880 33428 S 0.0 0.2 0:00.00 /tools/node/bin
57 root20 0 359M 62880 33428 S 0.0 0.2 0:00.05 /tools/node/bin
58 root20 0 359M 62880 33428 S 0.0 0.2 0:00.04 /tools/node/bin
59 root20 0 359M 62880 33428 S 0.0 0.2 0:00.05 /tools/node/bin
60 root20 0 359M 62880 33428 S 0.0 0.2 0:00.04 /tools/node/bin
1 root20 0 359M 62880 33428 S 0.0 0.2 0:08.76 /tools/node/bin
16 root20 0 35892 4768 3660 S 0.0 0.0 0:00.62 tail -n +0 -F /
75 root20 0 190M 61096 13512 S 0.0 0.2 0:00.00 /usr/bin/python
76 root20 0 190M 61096 13512 S 0.0 0.2 0:00.56 /usr/bin/python
F1Help F2Setup F3SearchF4FilterF5Tree F6SortByF7Nice -F8Nice +F9Kill F10Quit
【讨论】:
【参考方案8】:这听起来可能很无聊,但是,如果您有多个显示器,则可以在“记录我的桌面”捕获该区域时运行 htop。它更像是一个视频,可能对搜索和排序没有帮助,但它看起来不错。
【讨论】:
以上是关于htop 输出到人类可读文件的主要内容,如果未能解决你的问题,请参考以下文章