Как зебру разделить на консоль?
Мне бы хотелось, чтобы терминал чередовал цвет фона на последовательных линиях, чтобы было легче увидеть, где начинается, а где заканчивается. Это было бы особенно полезно при чтении журналов с помощью tail -f, но я бы предпочел решение, которое работает постоянно. Особенно, если это то, что я могу использовать с Terminator, хотя я хотел бы использовать другой терминал, если он имеет эту функциональность.
1 ответ
Может потребоваться собственный терминал, чтобы получить такую функциональность при любых обстоятельствах, кроме таких вещей, как tail -f
следующие python3
скрипт должен работать:
#!/usr/bin/python3
import shutil
import sys
try:
from termcolor import cprint
except:
print("Error: please install the python3-termcolor package")
sys.exit(1)
def expandtabs(line):
"""Tabs don't seem to be highlighted so expand them to spaces"""
result = ""
col = 0
for c in line:
if c == "\t":
next_col = 8 * ((col // 8) + 1)
result += " " * (next_col - col)
col = next_col
else:
result += c
col += 1
return result
def pad(line, n):
"""Pad a line until it is a multiple of n, to avoid jagged highlighting"""
while (len(line) % n) != 0:
line += " "
return line
# Get the width of the terminal
cols, rows = shutil.get_terminal_size()
try:
odd = True
for line in sys.stdin:
if odd:
cprint(pad(expandtabs(line.rstrip()), cols), "white", "on_grey")
else:
cprint(pad(expandtabs(line.rstrip()), cols), "grey", "on_white")
odd = not odd
except KeyboardInterrupt:
sys.exit(0)
Если сохранено как zebra.py
где-нибудь на вашем пути, его можно добавить к таким командам, как:
cat /proc/cpuinfo | zebra.py
tail -f /var/log/kern.log | zebra.py
Это требует python3-termcolor
пакет и, по крайней мере, Python 3.3, чтобы использовать shutil.get_terminal_size
функция. Существует много возможностей для улучшения, можно попробовать python3-xtermcolor
пакет, чтобы получить больше, чем просто несколько цветов на https://pypi.python.org/pypi/termcolor, добавить функциональность для чтения файлов из командной строки, а не просто stdin
, так далее.
Я не уверен, что это делает вывод намного легче читать, но это, безусловно, выглядит аккуратно.