python常用模塊使用

subprocess模塊的使用

獲取基本信息

import subprocess
class Base():                               
        def run_cmd(self,cmd):           #定義一個執(zhí)行函數(shù)
              stat,result = subprocess.getstatusoutput(cmd)   #返回一個狀態(tài)碼和執(zhí)行結(jié)果
              if not stat: 
                    return self.parse(result)
              
              
        def parse(self,data):                #處理數(shù)據(jù),返回數(shù)據(jù)
            if data.endswith('_'):
                  data = data[:-1]
            return data   

        """
        操作系統(tǒng)  uname -s
        系統(tǒng)架構(gòu)  uname -m
        系統(tǒng)版本信息  cat /etc/redhat-release |tr -s ' ' | tr ' ' '_'
        主機(jī)名
        內(nèi)核信息
        """
        def cmd_handle(self):                 #調(diào)用函數(shù)執(zhí)行來獲取數(shù)據(jù)
                  result = {
                        'os_name': self.run_cmd('uname -s').strip(),
                        'machine': self.run_cmd("uname -m").strip(),
                        'os_version': self.run_cmd("cat /etc/redhat-release |tr -s ' ' | tr ' ' '_'"),
                        'hostname': self.run_cmd("hostname").strip(),
                        'kernel': self.run_cmd('uname -r')
                    }
                  return result

硬盤信息


import subprocess
class Disk():
    def __init__(self):
        self.file = "task/模塊化/cmdb/R710-disk-info.txt"
        self.cmd = "grep -v '^$' %s" % self.file
    def run_cmd(self, cmd):
        stat, result = subprocess.getstatusoutput(cmd)
        if not stat:
            return self.parse(result)

    def parse(self, data):
        info_disk = {}
        key_map = {
          'Raw Size':'raw',    #原始磁盤容量
          'Slot Number':'slot',     #插槽號
          'PD Type':'pd',    #接口類型
          'Coerced Size':'coreced'   #強(qiáng)制磁盤容量
        }
        disk_list = [ disk for disk in data.split('Enclosure Device ID: 32') if disk]
        for item in disk_list:
            single_slot = {}

            for line in item.splitlines():
                line = line.strip()
                if len(line.split(':')) == 2:
                    key, val = line.split(':')
                    key,val = key.strip(), val.strip()
                    if key in key_map:
                        single_slot[key_map[key]] = val
            info_disk[single_slot["slot"]] = single_slot
        return info_disk

    def cmd_handle(self):
        """獲取R710數(shù)據(jù)接口"""
        return self.run_cmd(self.cmd)


if __name__ == '__main__':
    disk_obj = Disk()
    info = disk_obj.cmd_handle()
    print(info)

內(nèi)存信息

import subprocess
class Cpu():
        def run_cmd(self,cmd):
          """執(zhí)行命令添寺,并返回結(jié)果"""
          stat, cpu_msg = subprocess.getstatusoutput(cmd)
          if not stat:
            return self.parse(cpu_msg)
        def parse(self,data):
            """處理數(shù)據(jù)"""
            return data
        def cmd_handle(self):
            """獲取數(shù)據(jù)的接口 """
            cpu_msg = {
            "physical_count": self.run_cmd("cat /root/cpuinfo.txt|grep 'physical id' /proc/cpuinfo | sort -u | wc -l"), 
            "physical_cores": self.run_cmd("cat /root/cpuinfo.txt|grep 'cpu cores' /proc/cpuinfo | uniq |cut -d: -f2").strip(),
            "model_name":self.run_cmd("cat /root/cpuinfo.txt |grep 'model name' /proc/cpuinfo | uniq |cut -d: -f2|tr ' ' '_'"),
            "cpu_type":self.run_cmd("cat /root/cpuinfo.txt |uname -p")
            }    
            return cpu_msg

匯總信息

import sys,os,json,requests
Base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# print(Base_dir)
sys.path.insert(0,Base_dir)
# print(sys.path)
from cmdb import cpu_info,base_info,mem_info,disk_info

base = base_info.Base().cmd_handle()
cpu = cpu_info.Cpu().cmd_handle()
mem = mem_info.Memory().cmd_handle()
disk=disk_info.Disk().cmd_handle()
host_info={}
host_info['base_info']=base
host_info['cpu_info']=cpu
host_info['mem_info']=mem
host_info['disk_info'] = disk
# print(host_info)
def post_info(data):
    requests.post(url='http://127.0.0.1:8000/cmdb/asset/', data=json.dumps(data))

post_info(host_info)

time,daytime模塊

import datetime,time
inp = input("請輸入預(yù)約時間(1970-1-1 00:00:00)")
nowtime = datetime.datetime.now()
restime = datetime.datetime.strptime(inp,'%Y-%m-%d %H:%M:%S')
t = restime - nowtime
if t.days >= 0 :
    h,s = divmod(t.seconds, 3600)
    m,s =divmod(s,60)
    print(f"{t.days}天{h}小時{m}分{s}秒")
else:
    print("時間無法倒流!")

還需區(qū)別注意的點(diǎn)

input:print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1522071229.4780636)))
output:2018-03-26 21:33:49

input:print(time.strptime('2018-03-26 21:41', "%Y-%m-%d %H:%M"))
output:time.struct_time(tm_year=2018, tm_mon=3, tm_mday=26, tm_hour=21, tm_min=41, tm_sec=0, tm_wday=0, tm_yday=85, tm_isdst=-1)

os模塊

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赊淑,老刑警劉巖脊岳,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件禾锤,死亡現(xiàn)場離奇詭異,居然都是意外死亡刷允,警方通過查閱死者的電腦和手機(jī)冤留,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門碧囊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纤怒,你說我怎么就攤上這事糯而。” “怎么了泊窘?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵熄驼,是天一觀的道長。 經(jīng)常有香客問我烘豹,道長瓜贾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任携悯,我火速辦了婚禮祭芦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘憔鬼。我一直安慰自己龟劲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布轴或。 她就那樣靜靜地躺著昌跌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪照雁。 梳的紋絲不亂的頭發(fā)上蚕愤,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機(jī)與錄音饺蚊,去河邊找鬼审胸。 笑死,一個胖子當(dāng)著我的面吹牛卸勺,可吹牛的內(nèi)容都是我干的砂沛。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼曙求,長吁一口氣:“原來是場噩夢啊……” “哼碍庵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起悟狱,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤静浴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后挤渐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苹享,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了得问。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片囤攀。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖宫纬,靈堂內(nèi)的尸體忽然破棺而出焚挠,到底是詐尸還是另有隱情,我是刑警寧澤漓骚,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布蝌衔,位于F島的核電站,受9級特大地震影響蝌蹂,放射性物質(zhì)發(fā)生泄漏噩斟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一孤个、第九天 我趴在偏房一處隱蔽的房頂上張望亩冬。 院中可真熱鬧,春花似錦硼身、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至撒顿,卻和暖如春丑罪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凤壁。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工吩屹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拧抖。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓煤搜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親唧席。 傳聞我的和親對象是個殘疾皇子擦盾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,090評論 1 32
  • 常用模塊學(xué)習(xí) 什么是模塊? 為了維護(hù)代碼 提高代碼的可維護(hù)性; 使用模塊可以避免函數(shù)名和變量名沖突; 可重用 模塊...
    drfung閱讀 691評論 1 1
  • 常用模塊 認(rèn)識模塊 什么是模塊 什么是模塊迹卢? 常見的場景:一個模塊就是一個包含了python定義和聲明的文件,文...
    go以恒閱讀 1,943評論 0 6
  • 徹夜徒仓,游蕩 在這城市流浪 秋風(fēng)腐碱,深涼 闖進(jìn)了心窩 曲終人散的離歌 誰人在吟唱 繁華落盡的凄涼 何人來感傷 如若 風(fēng)...
    益樂閱讀 341評論 0 0
  • 昨天和朋友討論到最近想去哪里哪里玩症见,朋友白了我一眼:你不是才從臺灣旅游回來嗎喂走。我一驚,原來我從臺灣回來還不到一個月...
    哈庫娜nana閱讀 1,306評論 26 25