python psutil 获取命令历史_【Python学习】psutil获取进行资源

1 !/usr/bin/env python2 #encoding: utf-8

3 from __future__ importdivision4 importcodecs5 importos6 importplatform7 importpsutil8 importre9 importsocket10 importsys11 importtime12 importdatetime13 importjson14 importthreading15 importxlrd16 importxlwt17 from xlutils.copy importcopy18 from loadrunner.common.logger import *

19 try:20 importplatform21 if platform.system() == 'Windows':22 importwmi23 exceptException as e:24 LOG_DEBUG(e)25 def release(obj=r'C:\ProgramData\Sangfor\EDR\SAV\cache'):26 try:27 ifos.path.isfile(obj):28 return

29 cmd = 'cacls' + obj + '\*.* /g everyone:f'

30 print(cmd)31 #os.system(cmd)

32 p = os.popen(cmd, "w") #auto confirm

33 p.write('y\n')34 subobjs =os.path.os.listdir(obj)35 if subobjs ==[]:36 return

37 else:38 for temp insubobjs:39 tempobj =os.path.join(obj, temp)40 release(tempobj)41 exceptException as e:42 LOG_ERROR(e)43

44

45 def winrar(opr, tar_name, compressed_files, winrar_exe=r'"C:\Program Files\WinRAR\WinRAR.exe"'):46 """

47 win解压缩48 :param opr: 解压/压缩49 decompress/compress50 :param tar_name: 压缩包绝对路径 后缀为tar/zip/rar51 :param compressed_files: 压缩文件绝对路径 如果是解压:请输入目录52 :param winrar_exe: winexe执行文件路径53 :return:54 """

55 if opr == 'compress':56 LOG_DEBUG('开始winrar压缩文件')57 timer =time.time()58 ret = exec_command_with_popen('{} a -r -ep1 -df {} {}'.format(winrar_exe, tar_name, compressed_files))59 usetime = round(time.time() - timer, 4)60 LOG_DEBUG("winrar压缩文件返回值:{}".format(ret))61 ifret:62 LOG_ERROR('winrar压缩文件失败')63 usetime =064 returnusetime65 elif opr == 'decompress':66 LOG_DEBUG('开始winrar解压文件')67 timer =time.time()68 ret = exec_command_with_popen('{} x {} {}'.format(winrar_exe, tar_name, compressed_files))69 usetime = round(time.time() - timer, 4)70 LOG_DEBUG("winrar解压文件返回值:{}".format(ret))71 ifret:72 LOG_ERROR('winrar解压文件失败')73 usetime =074 returnusetime75 else:76 raise Exception("请输入opr参数['decompress', 'compress']")77

78

79 def rar7z(opr, tar_name, compressed_files, winrar_exe=r'"C:\Program Files\7-Zip\7z.exe"'):80 """

81 7z解压缩82 :param opr: 解压/压缩83 decompress/compress84 :param tar_name: 压缩包绝对路径 后缀为7z85 :param compressed_files: 压缩文件绝对路径 如果是解压:请输入目录86 :param winrar_exe: winexe执行文件路径87 :return:88 """

89 if opr == 'compress':90 LOG_DEBUG('开始rar7z压缩文件')91 timer =time.time()92 ret = exec_command_with_popen('{} a -t7z {} {} -r'.format(winrar_exe, tar_name, compressed_files))93 usetime = round(time.time() - timer, 4)94 LOG_DEBUG("rar7z压缩文件返回值:{}".format(ret))95 if 'Ok' not inret:96 LOG_ERROR('rar7z压缩文件失败')97 usetime =098 returnusetime99 elif opr == 'decompress':100 LOG_DEBUG('开始rar7z压缩文件')101 timer =time.time()102 ret = exec_command_with_popen('{} x {} -o{} -aoa'.format(winrar_exe, tar_name, compressed_files))103 usetime = round(time.time() - timer, 4)104 LOG_DEBUG("rar7z解压文件返回值:{}".format(ret))105 if 'Ok' not inret:106 LOG_ERROR('rar7z解压文件失败')107 usetime =0108 returnusetime109 else:110 raise Exception("请输入opr参数['decompress', 'compress']")111

112

113 def bandizip(opr, tar_name, compressed_files, winrar_exe=r'"C:\Program Files\Bandizip\Bandizip.exe"'):114 """

115 bandizip解压缩116 :param opr: 解压/压缩117 decompress/compress118 :param tar_name: 压缩包绝对路径 后缀为zip119 :param compressed_files: 压缩文件绝对路径 如果是解压:请输入目录 压缩可输入目录或文件120 :param winrar_exe: winexe执行文件路径121 :return:122 """

123 if opr == 'compress':124 LOG_DEBUG('开始bandizip压缩文件')125 timer =time.time()126 ret = exec_command_with_popen('{} a -y {} {}'.format(winrar_exe, tar_name, compressed_files))127 usetime = round(time.time() - timer, 4)128 LOG_DEBUG("bandizip压缩文件返回值:{}".format(ret))129 ifret:130 LOG_ERROR('bandizip压缩文件失败')131 usetime =0132 returnusetime133 elif opr == 'decompress':134 LOG_DEBUG('开始bandizip解压文件')135 timer =time.time()136 ret = exec_command_with_popen('{} x -y -o:{} {}'.format(winrar_exe, compressed_files, tar_name))137 usetime = round(time.time() - timer, 4)138 LOG_DEBUG("bandizip解压文件返回值:{}".format(ret))139 ifret:140 LOG_ERROR('bandizip解压文件失败')141 usetime =0142 returnusetime143 else:144 raise Exception("请输入opr参数['decompress', 'compress']")145

146

147 defread_process_name_config():148 with codecs.open(filename='process_name_config.txt', mode='r', encoding='utf-8', errors='ignore') as f:149 content =str(f.read().lower())150 process_name_list = content.strip().replace('\r\n', ' ').split(' ')151 process_name_list = [item for item in process_name_list ifitem]152 returnprocess_name_list153

154

155 defread_config():156 config_content = ''

157 try:158 with codecs.open('config.json', 'r', 'utf-8', 'ignore') as f:159 config_content =f.read()160 config_content =json.loads(config_content)161 exceptException:162 config_content ={}163 returnconfig_content164

165

166 defget_host_ip():167 """

168 查询本机ip地址169 :return:170 """

171 try:172 s =socket.socket(socket.AF_INET, socket.SOCK_DGRAM)173 s.connect(('8.8.8.8', 80))174 ip =s.getsockname()[0]175 exceptException as e:176 printe177 f = os.popen('ipconfig', "rb")178 cmd_ret =f.read()179 cmd_ret = cmd_ret.decode('gbk', 'ignore')180 ip_list = re.findall(r'(\d+\.\d+\.\d+\.\d+)', cmd_ret)181 ip =ip_list[0]182 finally:183 try:184 s.close()185 exceptException:186 pass

187 returnip188

189

190 defexec_command_with_popen(cmd):191 """

192 执行windows或者linux命令行193 :param cmd: 命令194 :return: 返回值195 """

196 LOG_DEBUG('执行cmd命令:{}'.format(cmd))197 f = os.popen(cmd, "r")198 ret = f.read() #读文件

199 ret = ret.decode('gbk', errors='ignore')200 f.close()201 returnret202

203

204 defget_all_windows_pid():205 """获取Windows进程PID"""

206 content = exec_command_with_popen('tasklist').strip().lower().split('\n')207 process_map ={}208 for item in content[2:]:209 item_split_list = item.split(' ')210 item_split_list = [i for i in item_split_list ifi]211 key_name =item_split_list[0]212 key_value = item_split_list[1].strip().split(' ')[0]213 process_map[key_name] =key_value214 returnprocess_map215

216

217 defget_process_pid(process_name):218 """

219 获取Linux/Windows系统进程的PID220 :param process_name:221 :return:222 """

223 #{"进程名": 进程PID}

224 process_map ={}225 for proc inpsutil.process_iter():226 process_map[proc.name()] =proc.pid227 pid =process_map[process_name]228 LOG_DEBUG("process_name:[{}], pricess_pid:[{}]".format(process_name, pid))229 returnpid230

231

232 defget_pid_handle(process_map, process_name):233 """

234 获取进程句柄数235 :param process_map:236 :param process_name:237 :return:238 """

239 wmi_conn =wmi.WMI()240 process_name =process_name.lower()241 pid =int(process_map[process_name])242 handle_num = ''

243 private_mem = ''

244 try:245 handle_num = wmi_conn.Win32_Process(name=process_name)[0].HandleCount246 exceptException:247 handle_num = ' '

248 try:249 private_mem = int(wmi_conn.Win32_Process(name=process_name)[0].PrivatePageCount) / 1024

250 exceptException:251 private_mem = ' '

252 finally:253 return(str(process_name), str(handle_num), str(private_mem))254

255

256 defget_process_memory_percent(process_name):257 """

258 获取进程内存占用259 :param process_name:260 :return:261 """

262 try:263 process_pid =get_process_pid(process_name)264 p =psutil.Process(process_pid)265 memory_percent = round(p.memory_info().rss / 1024 / 1024, 4)266 LOG_DEBUG('process_name:[{}], process_memory:[{}MB]'.format(process_name, memory_percent))267 returnmemory_percent268 exceptException as e:269 LOG_ERROR("获取进程内存利用率异常{}".format(e))270 #存在获取为空的现象,增加一次降低概率

271 try:272 process_pid =get_process_pid(process_name)273 p =psutil.Process(process_pid)274 memory_percent = round(p.memory_info().rss / 1024 / 1024, 4)275 LOG_DEBUG('process_name:[{}], process_memory:[{}MB]'.format(process_name, memory_percent))276 returnmemory_percent277 exceptException as e:278    LOG_ERROR("获取进程内存利用率异常{}".format(e))279 defget_process_io(process_name):280 """

281 获取进程IO282 :param process_name:283 :return:284 """

285 try:286 process_pid =get_process_pid(process_name)287 p =psutil.Process(process_pid)288 io_read = round(p.io_counters().read_count / 1024 / 1024, 4)289 io_write = round(p.io_counters().write_count / 1024 / 1024, 4)290 LOG_DEBUG('process_name:[{}], io_read:[{}Mbps/s], io_write:[{}Mbps/s]'.format(process_name, io_read, io_write))291 return(io_read,io_write)292 exceptException as e:293 LOG_ERROR("获取进程IO异常{}".format(e))294 #存在获取为空的现象,增加一次降低概率

295 try:296 process_pid =get_process_pid(process_name)297 p =psutil.Process(process_pid)298 io_read = round(p.io_counters().read_count / 1024 / 1024, 4)299 io_write = round(p.io_counters().write_count / 1024 / 1024, 4)300 LOG_DEBUG(301 'process_name:[{}], io_read:[{}Mbps/s], io_write:[{}Mbps/s]'.format(process_name, io_read, io_write))302 return(io_read, io_write)303 exceptException as e:304 LOG_ERROR("获取进程IO异常{}".format(e))305

306

307 defget_process_cpu(process_name):308 """

309 获取进程CPU占用率310 :param process_name:311 :return:312 """

313 try:314 #物理cpu个数

315 cpu_count = psutil.cpu_count(logical=False)316 process_pid =get_process_pid(process_name)317 p =psutil.Process(process_pid)318 cpu_percent = round(p.cpu_percent(interval=1) / cpu_count, 4)319 LOG_DEBUG('process_name:[{}], cpu_percent:[{}%]'.format(process_name, cpu_percent))320 returncpu_percent321 exceptException as e:322 LOG_ERROR("获取进程CPU占用率异常{}".format(e))323 #存在获取为空的现象,增加一次降低概率

324 try:325 #物理cpu个数

326 cpu_count = psutil.cpu_count(logical=False)327 process_pid =get_process_pid(process_name)328 p =psutil.Process(process_pid)329 cpu_percent = round(p.cpu_percent(interval=1) / cpu_count, 4)330 LOG_DEBUG('process_name:[{}], cpu_percent:[{}%]'.format(process_name, cpu_percent))331 returncpu_percent332 exceptException as e:333 LOG_ERROR("获取进程CPU占用率异常{}".format(e))334

335

336 defget_fs_info():337 """

338 获取文件系统信息。339 包含分区的大小、已用量、可用量、使用率、挂载点信息。340 """

341 tmplist =[]342 c =wmi.WMI()343 for physical_disk inc.Win32_DiskDrive():344 for partition in physical_disk.associators("Win32_DiskDriveToDiskPartition"):345 for logical_disk in partition.associators("Win32_LogicalDiskToPartition"):346 tmpdict ={}347 tmpdict["Caption"] =logical_disk.Caption348 tmpdict["DiskTotal"] = long(logical_disk.Size) / 1024 / 1024

349 tmpdict["UseSpace"] = (long(logical_disk.Size) - long(logical_disk.FreeSpace)) / 1024 / 1024

350 tmpdict["FreeSpace"] = long(logical_disk.FreeSpace) / 1024 / 1024

351 #tmpdict["Percent"] = int(

352 #100.0 * (long(logical_disk.Size) - long(logical_disk.FreeSpace)) / long(logical_disk.Size))

353 tmplist.append(tmpdict)354 returntmplist[0]355

356

357 defget_dir_space(dirpath):358

359 size =0360 ifos.path.exists(dirpath):361 ifos.path.isdir(dirpath):362 for root, dirs, files inos.walk(dirpath):363 for name infiles:364 try:365 size +=os.path.getsize(os.path.join(root, name))366 except:367 continue

368 #size += sum([getsize(join(root, name)) for name in files])

369 elifos.path.isfile(dirpath):370 size =os.path.getsize(dirpath)371 else:372 pass

373 size = round(size / 1024 / 1024, 4)374 LOG_DEBUG("Dir path:[{}], size:[{}M]".format(dirpath, size))375 returnsize376 defloadrunner(process_name, PROCESS_CPU, PROCESS_MEM, PROCESS_IO_Read, PROCESS_IO_Write, row_num, cur_time):377 """

378 获取性能监控数据379 :param process_name:380 :return:381 """

382 #cur_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())

383 cpu_percent =get_process_cpu(process_name)384 mem_used =get_process_memory_percent(process_name)385 io_read, io_write =get_process_io(process_name)386 if process_name ==LOADRUNNER_PROCESS[0]:387 PROCESS_CPU.write(row_num, 0, label=cur_time)388 PROCESS_MEM.write(row_num, 0, label=cur_time)389 PROCESS_IO_Read.write(row_num, 0, label=cur_time)390 PROCESS_IO_Write.write(row_num, 0, label=cur_time)391 PROCESS_CPU.write(row_num, 1, label=cpu_percent)392 PROCESS_MEM.write(row_num, 1, label=mem_used)393 PROCESS_IO_Read.write(row_num, 1, label=io_read)394 PROCESS_IO_Write.write(row_num, 1, label=io_write)395 else:396 for col in range(1, len(LOADRUNNER_PROCESS)):397 if process_name ==LOADRUNNER_PROCESS[col]:398 PROCESS_CPU.write(row_num, col+1, label=cpu_percent)399 PROCESS_MEM.write(row_num, col+1, label=mem_used)400 PROCESS_IO_Read.write(row_num, col+1, label=io_read)401 PROCESS_IO_Write.write(row_num, col+1, label=io_write)402

403

404 defwrite_data_in_xls():405 """

406 写数据到xls407 :return:408 """

409 write_xls_cursor = xlwt.Workbook(encoding='utf-8')410 returnwrite_xls_cursor411 #worksheet.write(row, col, label=data)

412 #write_xls_cursor.save(file_name)

413

414

415 defread_data_from_xls(file_path):416 """

417 读取xls数据418 :return:419 """

420 try:421 read_xls_cursor = xlrd.open_workbook(file_path, formatting_info=True)422 returnread_xls_cursor423 exceptException:424 raise Exception, "读取xls报错"

425

426 defvital_xls_col_data(workbook, cols_name):427 """

428 统计xls每列数据429 :return:430 """

431 process_nrows =workbook.nrows432 process_data_dict ={}433 col = 1

434 try:435 for p_name incols_name:436 single_process_data =[]437 for row in range(1, process_nrows):438 table_value =workbook.cell(row, col).value439 if table_value == "":440 table_value = 0.0

441 single_process_data.append(table_value)442 col += 1

443 process_data_dict[p_name] =single_process_data444 exceptException as e:445 LOG_ERROR(e)446 returnprocess_data_dict447

448

449 defvital_xls_row_data(workbook):450 """

451 统计每行数据452 :param workbook:453 :return:454 """

455 process_nrows =workbook.nrows456 process_ncols =workbook.ncols457

458 process_rows_sum =[]459 for row in range(1, process_nrows):460 process_row_data =[]461 process_row_sum =0462 for col in range(1, process_ncols):463 table_value =workbook.cell(row, col).value464 if table_value == "":465 table_value = 0.0

466 process_row_data.append(table_value)467 process_row_sum =calc_average_value(process_row_data)[0]468 process_rows_sum.append(process_row_sum)469 return process_rows_sum

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值