
开发过程乱码集合


可以使用Pyautoit 来模拟点击或者按键。Pygui也快。测试pyautoit比较好。但是实际只是封装了autoit的dll。建议直接用autoit写,类VB风格编程。
import csv
def WriteinfoToCsv(filename,itemname,iteminfo):
'''
:param filename:String类型
:param itemname:list类型
:param iteminfo:list类型
:return: 1
'''
with open(filename, 'w',newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerow(itemname)
writer.writerow(iteminfo)
return 1
参考下面函数:
def getValueFromHost(host,itemName):
'''
:param host: host name,usually ip,like '10.189.66.131',but need to be string type.
:param itemName: like "*cpu_model*", need to be string type.
:return: The last value of itemName for specific 'host'. String type.
'''
for h in zapi.item.get(output=["itemid", "name", "hostid", "value_type", "lastvalue"], host=host,
search={"name": '*'+itemName+'*'}, searchWildcardsEnabled='1'):
return (h['lastvalue'])
def getValueFromItem(host,item):
'''
:param host:
:param item:
:return: return 数组
'''
data=[]
for eachItem in item:
data.append(getValueFromHost(host,eachItem))
return data
另外,获取某主机资产清单值,使用以下函数:
def getInventorydataFromHostName(hostname,item):
for h in zapi.host.get(output=['host'], filter={'host': hostname},
selectInventory=[item]):
return h['inventory'][item]
另外,预先导入:
from pyzabbix import ZabbixAPI, ZabbixAPIException
from datetime import datetime
import time
import warnings
json格式如下:
{
“data”: [
{
“{#HOSTIP}”: “/var/log/audit”
},
{
“{#HOSTIP}”: “/var/log/chrony”
},
{
“{#HOSTIP}”: “/var/log/cups”
},
{
“{#HOSTIP}”: “/var/log/gdm”
},
{
“{#HOSTIP}”: “/var/log/glusterfs”
},
{
“{#HOSTIP}”: “/var/log/httpd”
},
{
“{#HOSTIP}”: “/var/log/mariadb”
},
{
“{#HOSTIP}”: “/var/log/ntpstats”
},
{
“{#HOSTIP}”: “/var/log/php-fpm”
},
{
“{#HOSTIP}”: “/var/log/pluto”
},
{
“{#HOSTIP}”: “/var/log/ppp”
},
{
“{#HOSTIP}”: “/var/log/qemu-ga”
},
{
“{#HOSTIP}”: “/var/log/sa”
},
{
“{#HOSTIP}”: “/var/log/samba”
},
{
“{#HOSTIP}”: “/var/log/speech-dispatcher”
},
{
“{#HOSTIP}”: “/var/log/sssd”
},
{
“{#HOSTIP}”: “/var/log/tuned”
}
]
}
产生该json格式的python代码参考:
#!/usr/bin/env python3
#encoding=utf-8
import os
import sys
import json
FileDir=’/var/log/’
def CheckHostip(filedir):
output = os.popen(‘find ‘+filedir+’* -maxdepth 0 -type d’)
hostip = str(output.read())
hostip = hostip[:hostip.find(‘\r’)]
hostdirlist = hostip.split(‘\n’)
return (hostdirlist)
def returnjson(fileDir):
thislist=[]
for i in CheckHostip(fileDir):
thislist.append({
“{#HOSTIP}”:i
})
a = {
“data”: thislist
}
print(json.dumps(a, sort_keys=True, indent=2))
return 1
if __name__==”__main__”:
returnjson(FileDir)
后续直接使用了宏,因此这个Python脚本没用了,但是还是觉得有意义,所以记下来。
#!/usr/bin/env python3
#encoding=utf-8
import os
import socket
from pyzabbix import ZabbixAPI, ZabbixAPIException
import sys
import warnings
import time
ServerName=”ServerNameHere”
Username=’usernamehere’
Passwd=’passwdhere’
Url=’https://zabbix.mytlu.cn’
FileDir=’/var/log/’
MonitorFilename=’/log’
def CheckHostip(filedir):
output = os.popen(‘find ‘+filedir+’* -maxdepth 0 -type d’)
hostip = str(output.read())
hostip = hostip[:hostip.find(‘\r’)]
hostdirlist = hostip.split(‘\n’)
return (hostdirlist)
def CheckZabbixItems(LogDir):
warnings.filterwarnings(‘ignore’)
ZABBIX_SERVER = Url
zapi = ZabbixAPI(ZABBIX_SERVER)
zapi.session.verify = False
zapi.login(Username, Passwd)
hostid=zapi.host.get(
filter={
“host”:ServerName
}
)
hostid=hostid[0][‘hostid’]
pre_interfaceid = zapi.hostinterface.get(
hostids=hostid
)
interfaceid = pre_interfaceid[0][‘interfaceid’]
try:
itemget = zapi.item.get(
hostid=hostid,
search={
“key_”: “vfs.file.md5sum[“+LogDir+MonitorFilename+”]”
},
sortfield=”name”
)
print(itemget)
if itemget == []:
print(‘zabbix里没有该监控项,添加中监控项和触发器中…’)
CreateItems(LogDir, interfaceid, hostid)
CreateTrigger(LogDir)
return 1
else:
print(‘zabbix里有该监控项,尝试添加中触发器中…’)
try:
CreateTrigger(LogDir)
except:
return 0
return 1
except Exception as e:
print(‘zabbix里没有该监控项,添加中监控项和触发器中…’)
CreateItems(LogDir,interfaceid,hostid)
CreateTrigger(LogDir)
return 1
def CreateItems(LogDir,interfaceid,hostid):
warnings.filterwarnings(‘ignore’)
ZABBIX_SERVER = Url
zapi = ZabbixAPI(ZABBIX_SERVER)
zapi.session.verify = False
zapi.login(Username,Passwd)
item = zapi.item.create(name=”Monitor_Log:”+LogDir+MonitorFilename,
key_=”vfs.file.md5sum[“+LogDir+MonitorFilename+”]”,
hostid=hostid,
type=0,
value_type=1,
delay=”10s”,
interfaceid=interfaceid
)
print(item)
return 1
def CreateTrigger(LogDir):
warnings.filterwarnings(‘ignore’)
ZABBIX_SERVER = Url
zapi = ZabbixAPI(ZABBIX_SERVER)
zapi.session.verify = False
zapi.login(Username, Passwd)
trigger = zapi.trigger.create(
description=”[“+LogDir+MonitorFilename+”]:Log not changed in 1s”,
expression=”{“+ServerName+”:vfs.file.md5sum[“+LogDir+MonitorFilename+”].change()}=0″,
priority=’4′,
manual_close=’1′
)
print(trigger)
return 1
if __name__==’__main__’:
hostdirlist=CheckHostip(FileDir)
print(hostdirlist)
for i in hostdirlist:
CheckZabbixItems(i)
代码是Python2代码,适当修改为长输出。可自行改为python3.
代码附赠了CPU负载和内存使用情况
代码引用地址:
https://gist.github.com/582033/b94dc1d4941f63bb28d837fa9c72f08d
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
显示树莓派cpu温度、使用率及内存使用率
'''
import os
import time
def show_temp():
file = open("/sys/class/thermal/thermal_zone0/temp")
temp = float(file.read()) / 1000
file.close()
print "Temp: %.1f ℃" %temp
def show_mem():
mem_cmd = "free -m | grep Mem | awk '{print ($4+$6)/$2}'"
mem_sur = round(float(os.popen(mem_cmd).read()), 2) * 100
print "Mem avail: %d%%" % mem_sur
def show_cpu():
cpu_cmd = "uptime | awk '{print $8,$9,$10,$11,$12}'"
cpu_used = os.popen(cpu_cmd).read()
print "Cpu Used: %s" % cpu_used.replace('\n', '')
if __name__ == '__main__':
while 1:
show_temp()
show_cpu()
show_mem()
print ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
time.sleep(2)