【发布时间】:2015-01-12 20:01:17
【问题描述】:
我有一个包含多个控制字符的输出文件(即来自screen 的日志)。在屏幕内部,我运行着使用控制字符刷新某些行的程序(例如top 或任何打印进度条)。
我想使用 PHP 输出此文件的 tail。如果我只是读入该文件并回显其内容(使用 PHP 函数或通过调用 tail,输出会很混乱,而且比最后几行要多得多,因为它还包含已被覆盖的内容。如果我改为运行 @987654325 @ 在命令行中,它返回正是我想要的,因为终端评估控制字符。
所以我的问题是:有没有一种方法可以评估控制字符,获得终端显示给我的输出,然后我可以在其他地方使用(例如,写入文件)?
【问题讨论】:
-
终端正在处理控制字符,而不是外壳。它们对非终端没有任何意义。手动剥离它们还不够吗?
-
您的发行版中可能没有预先编写和包含的内容,但是编写一个逐字节读取文件并省略输出内容的过滤器应该不会太难不想要。您所需要的只是您要消除的不同字符/序列的列表...
-
@twalberg:我认为这并不是仅仅消除它们的问题(PHP 通过忽略它们来有效地做到这一点)。假设我运行了一个程序打印它的进度(0% 完成,5% 完成,10% 完成等等,不是写新行而是重写同一行)然后只是剥离控制字符将导致所有这些百分比值都在输出中,而我只希望有最新的。
-
@EtanReisner:感谢您的澄清,我会相应地更新我的问题。
-
您通过可以理解终端控制字符的内容进行过滤。我不确定是否存在任何这样的东西(终端除外)。