我有以下输入:
localhost is alive
54.197.204.2 is alive
danezu4 172.31.24.178 Disk usage: 14602mb RAM available: 1837mb Uptime: 255mins CPULoad: 0.0%
danezu1 172.31.32.230 Disk usage: 14962mb RAM available: 1837mb Uptime: 255mins CPULoad: 0.0%
danezu4 172.31.24.178 Disk usage: 14602mb RAM available: 1837mb Uptime: 255mins CPULoad: 0.0%
danezu1 172.31.32.230 Disk usage: 14962mb RAM available: 1837mb Uptime: 255mins CPULoad: 0.0%
以下Python代码:
import colour
import fileinput
class Colour:
GREEN = '\033[92m'
RED = '\033[91m'
BOLD = '\033[1m'
END = '\033[0m'
uptime="Uptime:"
cpuload="CPULoad:"
f=open('/home/ansible/ansible/playbooks/healthcheckv2/sysinfo/files/ping.txt', 'r')
filedata=f.read()
f.close()
with open('/home/ansible/ansible/playbooks/healthcheckv2/sysinfo/files/ping.txt', 'r') as f:
for line in f:
words=line.split()
for i,w in enumerate(words):
if w==uptime:
if words[i+1]>86400:
filedata=filedata.replace(words[i+1], Colour.GREEN+words[i+1]+Colour.END)
elif words[i+1]<86399:
filedata=filedata.replace(words[i+1], Colour.RED+words[i+1]+Colour.END)
if w==cpuload:
if words[i+1]>80:
filedata=filedata.replace(words[i+1], Colour.RED+words[i+1]+Colour.END)
elif words[i+1]<79.99:
filedata=filedata.replace(words[i+1], Colour.GREEN+words[i+1]+Colour.END)
with open('/home/ansible/ansible/playbooks/healthcheckv2/sysinfo/files/ping.txt', 'w') as file:
file.write(filedata)
file.close()
在应用此Python代码后,我不理解文本颜色的行为。如果文本文件中的CPU低于80,则该值将为RED。如果值在文本文件中传递80%,则为绿色。同样的事情是申请正常运行时间价值。这可能有什么不对?
文本文件中的值在Jinja2模板文件中被舍入(但我不认为行为与此相关):
Uptime: {{(ansible_uptime_seconds/60)|round|int}}mins CPULoad: {{(cpuload.stdout)|float|round}}%
致以最诚挚的问候,
罗曼
答案 0 :(得分:1)
编辑:我认为我误解了这个问题,意味着你不理解转义序列。
如果你不明白为什么这些颜色应用错误,原因如下:
if words[i+1]>86400:
您正在将字符串与整数进行比较。
if float(words[i+1][:-4])>86400:
这将切断&#34;分钟&#34;形成正常运行时间并将其余部分转换为浮点数。
同样if float(words[i+1][:-1])>80:
允许将百分比与数字进行比较。
同样,因为0.0%在多行中被处理,replace
函数可能不是最适合您的需求,因为ist格式化每次出现的&#39; 0.0%&# 39;由于循环,立刻和三次结束。
第一个回答
你从不在这里使用colour
模块。
定义的类Colour
有四个值,即terminal Escape Sequences (link)的字符串。
ANSI / VT100终端和终端仿真器不仅能够显示黑白文本;由于转义序列,它们可以显示颜色和格式化文本。这些序列由Escape字符组成(通常由&#34; ^ [&#34;或&#34; Esc&#34;表示),后跟一些其他字符:&#34; Esc [FormatCodem&#34;。 (source)
Colour.RED
只是字符串'\033[91m'
的替身,可能会使代码更清晰。
此字符串由终端仿真器解释并更改以下字符&#39;颜色为红色。由Colour.END
表示的字符串将输出恢复为默认值。
cat ping.txt
在终端中显示解释后的文件,并显示您所遵循的颜色。