Python 奇怪的颜色行为
我有以下意见:Python 奇怪的颜色行为,python,colors,jinja2,Python,Colors,Jinja2,我有以下意见: 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
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()
致以最良好的祝愿
Romain编辑:我想我误解了这个问题,意思是你不理解转义序列 如果您不理解为什么颜色应用错误,以下是原因:
if words[i+1]>86400:
您正在将字符串与整数进行比较
if float(words[i+1][:-4])>86400:
这将切断正常运行时间中的“分钟”,并将其余部分转换为浮点数
同样地,if float(单词[i+1][:-1])>80:
允许将百分比与数字进行比较
另外由于0.0%在多行中移动,replace
功能可能并不最适合您的需要,因为ist会将每次出现的“0.0%”一次格式化,并由于循环而三次
第一个答案 您从未在此处使用
颜色
模块
定义的类color
有四个值,这些值是的字符串
ANSI/VT100终端和终端模拟器不仅能够显示黑白文本;由于转义序列,它们可以显示颜色和格式化文本。这些序列由转义字符(通常由“^[”或“Esc”表示)和一些其他字符组成:“Esc[FormatCodem”。
color.RED
只是字符串'\033[91m'
的替身,可能是为了让代码更清晰
此字符串由终端仿真器解释,并将以下字符的颜色更改为红色。color.END
表示的字符串将输出恢复为默认值
cat ping.txt
应用脚本后,在终端中显示解释过的文件,以及您观察到的颜色。如果我使用If float(words[I+1][:-1])>80:
,我得到:If float(words[I+1][:-1])>80:ValueError:无法将字符串转换为float:0.0
hm,我看不出它如何无法转换“0.0”…您也可以尝试另一种方法,即将两边都转换为字符串,但您必须注意字符串长度相等(在同一点包含小数点)并用零填充,以避免withespace和零之间的比较。如果“{:0>6.6s}”。格式(单词[i+1])>“080.0%”
或类似的内容
if float(words[i+1][:-4])>86400: