日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TypeError: type str doesn't define __round__ method

發布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TypeError: type str doesn't define __round__ method 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一開始把我給唬住了,后來發現是基礎問題,

最終結果如下:

?

#!/usr/bin/env python3 # -*- coding:utf-8 -*-import subprocessdef collect():filter_keys = ['Manufacturer', 'Serial Number', 'Product Name', 'UUID', 'Wake-up Type']raw_data = {}for key in filter_keys:try:res = subprocess.Popen("sudo dmidecode -t system|grep '%s'" % key,stdout=subprocess.PIPE, shell=True)result = res.stdout.read().decode()data_list = result.split(':')if len(data_list) > 1:raw_data[key] = data_list[1].strip()else:raw_data[key] = ''except Exception as e:print(e)raw_data[key] = ''data = dict()data['asset_type'] = 'server'data['manufacturer'] = raw_data['Manufacturer']data['sn'] = raw_data['Serial Number']data['model'] = raw_data['Product Name']data['uuid'] = raw_data['UUID']data['wake_up_type'] = raw_data['Wake-up Type']data.update(get_os_info())data.update(get_cpu_info())data.update(get_ram_info())data.update(get_nic_info())data.update(get_disk_info())return datadef get_os_info():"""獲取操作系統信息:return:"""distributor = subprocess.Popen("lsb_release -a|grep 'Distributor ID'",stdout=subprocess.PIPE, shell=True)distributor = distributor.stdout.read().decode().split(":")release = subprocess.Popen("lsb_release -a|grep 'Description'",stdout=subprocess.PIPE, shell=True)release = release.stdout.read().decode().split(":")data_dic = {"os_distribution": distributor[1].strip() if len(distributor) > 1 else "","os_release": release[1].strip() if len(release) > 1 else "","os_type": "Linux",}return data_dicdef get_cpu_info():"""獲取cpu信息:return:"""raw_cmd = 'cat /proc/cpuinfo'raw_data = {'cpu_model': "%s |grep 'model name' |head -1 " % raw_cmd,'cpu_count': "%s |grep 'processor'|wc -l " % raw_cmd,'cpu_core_count': "%s |grep 'cpu cores' |awk -F: '{SUM +=$2} END {print SUM}'" % raw_cmd,}for key, cmd in raw_data.items():try:result = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)raw_data[key] = result.stdout.read().decode().strip()except ValueError as e:print(e)raw_data[key] = ""data = {"cpu_count": raw_data["cpu_count"],"cpu_core_count": raw_data["cpu_core_count"]}cpu_model = raw_data["cpu_model"].split(":")if len(cpu_model) > 1:data["cpu_model"] = cpu_model[1].strip()else:data["cpu_model"] = ''return datadef get_ram_info():"""獲取內存信息Memory Device:.........Memory Device:......:return:"""raw_data = subprocess.Popen("sudo dmidecode -t memory", stdout=subprocess.PIPE, shell=True)raw_list = raw_data.stdout.read().decode().split("\n")raw_ram_list = []item_list = []for line in raw_list:if line.startswith("Memory Device"):raw_ram_list.append(item_list)item_list = []else:item_list.append(line.strip())ram_list = []for item in raw_ram_list:item_ram_size = 0ram_item_to_dic = {}for i in item:data = i.split(":")if len(data) == 2:key, v = dataif key == 'Size':if v.strip() != "No Module Installed":ram_item_to_dic['capacity'] = v.split()[0].strip()# print("---------------------------------")a=v.split()[0]# print(type(a))# print("a=",a)item_ram_size = round(int(a))else:ram_item_to_dic['capacity'] = 0if key == 'Type':ram_item_to_dic['model'] = v.strip()if key == 'Manufacturer':ram_item_to_dic['manufacturer'] = v.strip()if key == 'Serial Number':ram_item_to_dic['sn'] = v.strip()if key == 'Asset Tag':ram_item_to_dic['asset_tag'] = v.strip()if key == 'Locator':ram_item_to_dic['slot'] = v.strip()if item_ram_size == 0:passelse:ram_list.append(ram_item_to_dic)raw_total_size = subprocess.Popen("cat /proc/meminfo|grep MemTotal ", stdout=subprocess.PIPE, shell=True)raw_total_size = raw_total_size.stdout.read().decode().split(":")ram_data = {'ram': ram_list}if len(raw_total_size) == 2:total_gb_size = int(raw_total_size[1].split()[0]) / 1024**2ram_data['ram_size'] = total_gb_sizereturn ram_datadef get_nic_info():"""獲取網卡信息:return:"""raw_data = subprocess.Popen("ifconfig -a", stdout=subprocess.PIPE, shell=True)raw_data = raw_data.stdout.read().decode().split("\n")nic_dic = dict()next_ip_line = Falselast_mac_addr = Nonefor line in raw_data:if next_ip_line:next_ip_line = Falsenic_name = last_mac_addr.split()[0]mac_addr = last_mac_addr.split("HWaddr")[1].strip()raw_ip_addr = line.split("inet addr:")raw_bcast = line.split("Bcast:")raw_netmask = line.split("Mask:")if len(raw_ip_addr) > 1:ip_addr = raw_ip_addr[1].split()[0]network = raw_bcast[1].split()[0]netmask = raw_netmask[1].split()[0]else:ip_addr = Nonenetwork = Nonenetmask = Noneif mac_addr not in nic_dic:nic_dic[mac_addr] = {'name': nic_name,'mac': mac_addr,'net_mask': netmask,'network': network,'bonding': 0,'model': 'unknown','ip_address': ip_addr,}else:if '%s_bonding_addr' % (mac_addr,) not in nic_dic:random_mac_addr = '%s_bonding_addr' % (mac_addr,)else:random_mac_addr = '%s_bonding_addr2' % (mac_addr,)nic_dic[random_mac_addr] = {'name': nic_name,'mac': random_mac_addr,'net_mask': netmask,'network': network,'bonding': 1,'model': 'unknown','ip_address': ip_addr,}if "HWaddr" in line:next_ip_line = Truelast_mac_addr = linenic_list = []for k, v in nic_dic.items():nic_list.append(v)return {'nic': nic_list}def get_disk_info():"""獲取存儲信息。本腳本只針對ubuntu中使用sda,且只有一塊硬盤的情況。具體查看硬盤信息的命令,請根據實際情況,實際調整。如果需要查看Raid信息,可以嘗試MegaCli工具。:return:"""raw_data = subprocess.Popen("sudo hdparm -i /dev/sda | grep Model", stdout=subprocess.PIPE, shell=True)raw_data = raw_data.stdout.read().decode()data_list = raw_data.split(",")model = data_list[0].split("=")[1]sn = data_list[2].split("=")[1].strip()size_data = subprocess.Popen("sudo fdisk -l /dev/sda | grep Disk|head -1", stdout=subprocess.PIPE, shell=True)size_data = size_data.stdout.read().decode()size = size_data.split(":")[1].strip().split(" ")[0]result = {'physical_disk_driver': []}disk_dict = dict()disk_dict["model"] = modeldisk_dict["size"] = sizedisk_dict["sn"] = snresult['physical_disk_driver'].append(disk_dict)return resultif __name__ == "__main__":# 收集信息功能測試data = collect()print(data)

上述代碼是獲取當前的linux機器的一些物理參數的.

?

上述代碼在:

Ubuntu19.10 AMD64

Python3.7下面運行通過.

問題出在round()函數需要括號里面的是具體數字,而不是None/str

所以類型轉換下就好了.

?

?

?

總結

以上是生活随笔為你收集整理的TypeError: type str doesn't define __round__ method的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。