Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 奇怪的颜色行为_Python_Colors_Jinja2 - Fatal编程技术网

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: