簡體   English   中英

奇怪的色彩行為Python

[英]Strange colour behavior Python

我有以下輸入:

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}}% 

最好的祝福,

羅曼

編輯 :我認為我誤解了這個問題,意味着您不理解轉義序列。

如果您不明白為什么將顏色應用錯誤,這是為什么:

if words[i+1]>86400:

您正在將字符串與整數進行比較。

if float(words[i+1][:-4])>86400:

這將切斷正常運行時間的“分鍾”,並將其余時間轉換為浮點數。

同樣, if float(words[i+1][:-1])>80:則將百分比與數字進行比較。

同樣,由於0.0%位於多行中,因此replace函數可能並不最適合您的需求,因為ist一次將每次出現“ 0.0%”的格式設置為一次,由於循環而將其設置為三倍。


第一個答案

您永遠不會在這里使用colour模塊。

定義的類Colour具有四個值,這些值是終端轉義序列(link)的字符串。

ANSI / VT100終端和終端仿真器不僅可以顯示黑白文本,還可以顯示黑白文本。 由於使用了轉義序列,它們可以顯示顏色和格式化的文本。 這些序列由轉義字符(通常由“ ^ [”或“ Esc”表示)以及其他一些字符組成:“ Esc [FormatCodem”。 (資源)

Colour.RED只是字符串'\\033[91m'的替代者'\\033[91m' ,可能使代碼更易讀。

該字符串由終端仿真器解釋,並將以下字符的顏色更改為紅色。 Colour.END表示的字符串將輸出恢復為默認值。

應用腳本后, cat ping.txt在終端中顯示已解釋的文件,並帶有您觀察到的顏色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM