• 个人笔记: python 文件单独执行文件 注意要在终端中执行命令:python test.py os.system(cmd) 返回值为0:代表成功;...连续执行多条命令 os.popen("cd.. && cd demo && touch 2.py ")...

    个人笔记:

     python 文件单独执行文件

    注意要在终端中执行命令:python test.py

    os.system(cmd)  返回值为0:代表成功;1:代表失败

    os.popen(cmd) 将执行结果返回,但是测试表示并没有,具体原因后期记得更新

    连续执行多条命令

    os.popen("cd.. && cd demo && touch 2.py ") 

    注意:

    1. 命令被分号“;”分隔,这些命令会顺序执行下去;
    2. 命令被“&&”分隔,这些命令会顺序执行下去,遇到执行错误的命令停止;
    3. 命令被双竖线“||”分隔,这些命令会顺序执行下去,遇到执行成功的命令停止,后面的所有命令都将不会执行;

    例子:

    目录结构:

    代码:

    import os
     
    if __name__ == '__main__':
        a = os.system("ls -a")#单独 os.system
        print(a)
        print("-----------------")
        a = os.popen("touch 8.java") #单独 os.popen
        print(a)
        print("-----------------")
        print(os.popen("cd.. && cd demo && touch 2.py ")) #连续执行三条命令
    结果:


    原文:https://blog.csdn.net/GodDavide/article/details/86514705 

    展开全文
  • Linuxpython实现语音识别详细教程语音识别工作原理简介选择合适的python语音识别包安装SpeechRecognition识别器类音频文件的使用英文的语音识别噪音对语音识别的影响麦克风的使用中文的语音识别小范围中文识别语音...

    语音识别工作原理简介

    语音识别源于 20 世纪 50 年代早期在贝尔实验室所做的研究。早期语音识别系统仅能识别单个讲话者以及只有约十几个单词的词汇量。现代语音识别系统已经取得了很大进步,可以识别多个讲话者,并且拥有识别多种语言的庞大词汇表。
    语音识别的首要部分当然是语音。通过麦克风,语音便从物理声音被转换为电信号,然后通过模数转换器转换为数据。一旦被数字化,就可适用若干种模型,将音频转录为文本。
    大多数现代语音识别系统都依赖于隐马尔可夫模型(HMM)。其工作原理为:语音信号在非常短的时间尺度上(比如 10 毫秒)可被近似为静止过程,即一个其统计特性不随时间变化的过程。
    许多现代语音识别系统会在 HMM 识别之前使用神经网络,通过特征变换和降维的技术来简化语音信号。也可以使用语音活动检测器(VAD)将音频信号减少到可能仅包含语音的部分。
    幸运的是,对于 Python 使用者而言,一些语音识别服务可通过 API 在线使用,且其中大部分也提供了 Python SDK。

    选择合适的python语音识别包

    PyPI中有一些现成的语音识别软件包。其中包括:
    •apiai
    •google-cloud-speech
    •pocketsphinx
    •SpeechRcognition
    •watson-developer-cloud
    •wit
    一些软件包(如 wit 和 apiai )提供了一些超出基本语音识别的内置功能,如识别讲话者意图的自然语言处理功能。其他软件包,如谷歌云语音,则专注于语音向文本的转换。
    其中,SpeechRecognition 就因便于使用脱颖而出。
    识别语音需要输入音频,而在 SpeechRecognition 中检索音频输入是非常简单的,它无需构建访问麦克风和从头开始处理音频文件的脚本,只需几分钟即可自动完成检索并运行。

    安装SpeechRecognition

    SpeechRecognition 兼容 Python2.6 , 2.7 和 3.3+,但若在 Python 2 中使用还需要一些额外的安装步骤。大家可使用 pip 命令从终端安装 SpeechRecognition:pip3 install SpeechRecognition
    安装过程中可能会出现一大片红色字体提示安装错误!我在另一篇博客中有解决方法(https://blog.csdn.net/weixin_44895651/article/details/104276569
    安装完成后可以打开解释器窗口进行验证安装:
    在这里插入图片描述
    注:不要关闭此会话,在后几个步骤中你将要使用它。
    若处理现有的音频文件,只需直接调用 SpeechRecognition ,注意具体的用例的一些依赖关系。同时注意,安装 PyAudio 包来获取麦克风输入

    识别器类

    SpeechRecognition 的核心就是识别器类。
    Recognizer API 主要目是识别语音,每个 API 都有多种设置和功能来识别音频源的语音,这里我选择的是recognize_sphinx(): CMU Sphinx - requires installing PocketSphinx(支持离线的语音识别
    那么我们就需要通过pip命令来安装PocketSphinx,在安装过程中也容易出现一大串红色字体的错误。因为博主英语不太好,具体啥错误不知道。直接上解决方法吧!在我的另一篇文章有介绍:(https://blog.csdn.net/weixin_44895651/article/details/104445102

    音频文件的使用

    下载相关的音频文件保存到特定的目录(博主直接保存到ubuntu桌面):
    链接:https://pan.baidu.com/s/1oWG1A6JnjpeT_8DhEpoZzw
    提取码:sf73
    注意:
    AudioFile 类可以通过音频文件的路径进行初始化,并提供用于读取和处理文件内容的上下文管理器界面。
    SpeechRecognition 目前支持的文件类型有:

    • WAV: 必须是 PCM/LPCM 格式
    • AIFF
    • AIFF-CFLAC: 必须是初始 FLAC 格式;OGG-FLAC 格式不可用

    英文的语音识别

    在完成以上基础工作以后,就可以进行英文的语音识别了。
    (1)打开终端
    (2)进入语音测试文件所在目录(博主的是 桌面)
    (3)打开python解释器
    (4)按照下图输入相关命令
    在这里插入图片描述
    最后就可以看到语音转文字的内容(this they’ll smell …),其实效果还是很不错的!因为是英文,并且没有噪音。

    噪音对语音识别的影响

    噪声在现实世界中确实存在,所有录音都有一定程度的噪声,而未经处理的噪音可能会破坏语音识别应用程序的准确性。
    要了解噪声如何影响语音识别,请下载 “jackhammer.wav”(链接:https://pan.baidu.com/s/1AvGacwXeiSfMwFUTKer3iA
    提取码:3pj7)
    通过尝试转录效果并不好,我们可以通过尝试调用 Recognizer 类的adjust_for_ambient_noise()命令。
    当然具体的博主没有实践,不知道准确性如何!大家可以借鉴这篇文章(https://mp.weixin.qq.com/s/B1w-ZLwoK1-5wDZW9pJ82g

    麦克风的使用

    若要使用 SpeechRecognizer 访问麦克风则必须安装 PyAudio 软件包。
    如果使用的是基于 Debian的Linux(如 Ubuntu ),则可使用 apt 安装 PyAudio:sudo apt-get install python-pyaudio python3-pyaudio安装完成后可能仍需要启用 pip3 install pyaudio ,尤其是在虚拟情况下运行。
    在安装完pyaudio的情况下可以通过python实现语音录入生成相关文件。
    pocketsphinx的使用注意
    支持文件格式:wav
    音频文件的解码要求:16KHZ,单声道
    利用python实现录音并生成相关文件程序代码如下:

    from pyaudio import PyAudio, paInt16
    import numpy as np
    import wave
    class recoder:
         NUM_SAMPLES = 2000   
         SAMPLING_RATE = 16000  
         LEVEL = 500     
         COUNT_NUM = 20   
         SAVE_LENGTH = 8     
         Voice_String = []
         def savewav(self,filename):
             wf = wave.open(filename, 'wb')
             wf.setnchannels(1)
             wf.setsampwidth(2)
             wf.setframerate(self.SAMPLING_RATE)
             wf.writeframes(np.array(self.Voice_String).tostring())
             wf.close()
         def recoder(self):
             pa = PyAudio()
             stream = pa.open(format=paInt16, channels=1, rate=self.SAMPLING_RATE, input=True,frames_per_buffer=self.NUM_SAMPLES)
             save_count = 0
             save_buffer = []
             while True:
                string_audio_data = stream.read(self.NUM_SAMPLES)
                audio_data = np.fromstring(string_audio_data, dtype=np.short)
                large_sample_count = np.sum(audio_data > self.LEVEL)
                print(np.max(audio_data))
                if large_sample_count > self.COUNT_NUM:
                    save_count = self.SAVE_LENGTH
                else:
                    save_count -= 1
                if save_count < 0:
                    save_count = 0
                if save_count > 0:
                    save_buffer.append(string_audio_data )
                else:
                    if len(save_buffer) > 0:
                        self.Voice_String = save_buffer
                        save_buffer = []
                        print("Recode a piece of voice successfully!")
                        return True
    		 else:
                        return False
    if __name__ == "__main__":
        r = recoder()
        r.recoder()
        r.savewav("test.wav")
    

    注意:在利用python解释器实现时一定要注意空格!!!
    最后生成的文件就在Python解释器回话所在目录下,可以通过play来播放测试一下,如果没有安装play可以通过apt命令来安装。

    中文的语音识别

    在进行完以前的工作以后,我们对语音识别的流程大概有了一定的了解,但是作为一个中国人总得做一个中文的语音识别吧!
    我们要在CMU Sphinx语音识别工具包里面下载对应的普通话升学和语言模型。在这里插入图片描述
    图片中标记的就是普通话!下载相关的语音识别工具包。
    但是我们要把zh_broadcastnews_64000_utf8.DMP转化成language-model.lm.bin,这里可以借鉴这篇博主的文章。最后得到chinese.lm.bin
    再解压zh_broadcastnews_16k_ptm256_8000.tar.bz2得到zh_broadcastnews_ptm256_8000文件夹。
    借鉴刚才那位博主的方法,在Ubuntu下找到speech_recognition文件夹。可能会有很多小伙伴找不到相关的文件夹,其实是在隐藏文件下。大家可以点击文件夹右上角的三条杠。如下图所示:
    在这里插入图片描述
    然后给显示隐藏文件打个勾,如下图所示:
    在这里插入图片描述
    然后依次按照以下目录就可以找到啦:在这里插入图片描述
    然后把原来的en-US改名成en-US-bak,新建一个文件夹en-US,把解压出来的zh_broadcastnews_ptm256_8000改成acoustic-model,把chinese.lm.bin改成language-model.lm.bin,把pronounciation-dictionary.dic改后缀成dict,复制这三个文件到en-US里。同时把原来en-US文件目录下的LICENSE.txt复制到现在的文件夹下。
    最终该文件夹下有以下文件:
    在这里插入图片描述
    然后我们就可以通过麦克风录入一个语音文件文件(“test.wav”)
    在该文件目录下打开python解释器输入以下内容:
    在这里插入图片描述
    就看到了输出内容,但是我说的是两个中国,也测试了一下其他的发现识别效果很不好!!!
    当然有好多同学可能想要语音包,我就分享给大家啦!(链接:https://pan.baidu.com/s/13DTDnv_4NYbKXpkXAXODpw
    提取码:zh39)

    小范围中文识别

    用官方提供的效果太差,几乎不能用!那么我看了很多文章以后就想到了一种优化方法,但是只适合小范围的识别!一些命令啥的应该没有问题,但是聊天什么的可能就效果不太好。
    找到刚才复制的4个文件夹,有一个pronounciation-dictionary.dict的文件夹,打开以后是以下内容:
    在这里插入图片描述感觉这内容就是类似于一个字典,很多用词和平时交流的用词差距比较大。那么我们改成我们习惯的用词就可以啦! 抱着试一试的想法,结果还真的可以。识别效果真的不错!
    我的做法是:
    (1)把图片中红色标记以上的内容继续保留,红色以下的内容删除掉。当然处于保险考虑建议大家给该文件备份一下!
    (2)给红色线以下输入自己想识别的内容!(按照规则输入,不同于拼音!!!)最近新型肺炎的情况不断的变好,听到最多的一句话就是“中国加油”那么今天的内容就是将“中国加油”实现语音转文字!希望能早日开学,哈哈哈哈。
    在这里插入图片描述
    (3)输入以下内容:
    在这里插入图片描述
    就可以看到中国加油啦!同时希望肺炎疫情早日康复!

    语音合成

    语音合成个人的理解就是文字转语音。这篇文章已经介绍的很详细啦!(https://blog.csdn.net/chadian3912/article/details/81077537)所以我就不多介绍啦!不过这句话中可以设置client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) result = client.synthesis('你好百度', 'zh', 1, { 'vol': 5,'spd': 3,'pit':9,'per': 3})音量、声调、速度、男/女/萝莉/逍遥。
    大家快去尝试合成一下吧!最后来欣赏一下语音合成后4种不同风格的语音,你更喜欢那一款呢?

    展开全文
  • 环境:linux、脚本python、shell脚本方法一:脚本后加&amp;加了&amp;以后可以使脚本在后台运行,这样的话你就可以继续工作了。但是有一个问题就是你关闭终端连接后,脚本会停止运行;如:nohup python -u...

    环境:linux、脚本python、shell脚本

    方法一:脚本后加&

    加了&以后可以使脚本在后台运行,这样的话你就可以继续工作了。但是有一个问题就是你关闭终端连接后,脚本会停止运行;

    如:nohup python -u xx.py > log.out 2>&1 & 

    1、1是标准输出(STDOUT)的文件描述符,2是标准错误(STDERR)的文件描述符1> log.out 简化为 >log.out,表示把标准输出重定向到log.out这个文件

    2、2>&1 表示把标准错误重定向到标准输出,这里&1表示标准输出

    方法二:使用nohup在后台执行命令

    使用&符号在后台执行命令或脚本后,如果你退出登录,这个命令就会被自动终止掉。要避免这种情况,你可以使用nohup命令

    1. 可以写一个脚本,然后把脚本提交给服务器,让服务器在后台运行脚本里面的语句。假设我们定义了一个脚本start.sh,其内容如下:
    #!/bin/bash
    cd 想要运行文件的路径名
    python -u ***.py

    上述脚本中,#!/bin/bash是指此脚本使用/bin/bash来解释执行下面的语句,其中cd是表示将当前目录跳到所要运行文件所在目录,然后python -u ***.py则表示运行***python文件,当写完该脚本后,我们就可以使用下面的这条命令来执行该脚本从而让程序在后台运行:

    ./start.sh &

    在这里./start.sh表示运行当前目录下的脚本start.sh,> result.log表示把原来输出到控制台的东西都输出到result.log文件中,&表示在后台运行

    我们通过ps -e命令可以查看后台运行的进程都有哪些 
    这里写图片描述 
    上图我们可以看到,我们的脚本start.sh和Python程序都已经在后台成功运行,然后通过cat result.log | more就可以来查看原来输出到控制台的信息 
    注:要想执行python文件中的某个函数,一定要记得除了要定义该函数外,还要在该文件中调用该函数


    退出终端后程序仍继续运行,代码如下
    1. & nohup ./start.sh &  

     方法三:使用screen执行命令


    通过nohup和&符号在后台执行命令后,即使你退出登录,这个命令也会一直执行。但是,你无法重新连接到这个会话,要想重新连接到这个会话,你可以使用screen命令。.

    Linux的screen命令提供了分离和重新连接一个会话的功能。当你重新连接这个会话的时候,你的终端和你分离的时候一模一样。

     方法四:使用at将一个命令作为批处理执行


    使用at命令,你可以让一个命令在指定的日期和时间运行,例如要在明天上午10点在后台执行备份脚本,执行下面的命令:

    1. $ at -f backup.sh 10 am tomorrow  

    在批处理模式下执行某些任务需要启用一些选项。下面的文章会给出详细解释:

    方法五:使用watch连续地执行一个命令

    要想按一个固定的间隔不停地执行一个命令,可以使用watch命令,如下所示:

    $ watch df -h  

    另外查看进程确认脚本是否在继续运行的命令

    ps -ef|grep 脚本名  

    展开全文
  • 说明:此文针对需要用hive来查询长时间数据的人员,而且是需要按照天来输出查询数据,考虑到如果查询多天的,数据量过大会造成集群拥堵,所以按天输出,最终再做汇总。 .../usr/bin/env python #

    说明:此文针对需要用hive来查询长时间数据的人员,而且是需要按照天来输出查询数据,考虑到如果查询多天的,数据量过大会造成集群拥堵,所以按天输出,最终再做汇总。
    需求来源:如果你每天接触的都是日志类数据,日志每天的产生量都非常庞大,而你想对过去几个月的数据进行分析,就需要考虑如何有效的实现这种方式。
    假设想查询8月-10月的流量数据,可以这样:

     #!/usr/bin/env python
     # -*- coding: UTF-8 -*-
    
    import sys
    import os
    import re
    #假设hive数据文件以日期为分区。
    for i in range(0,92):
        if i<31:
            date=20160801+i
        elif i<61:
            date=20160901+i-31
        else:
            date=20161001+i-61
    #输出数据到以.data结尾的数据文件中,此处用了hive -e的用法
        sql = "hive -e \"hive sql执行脚本,日期分区用%d参数代替,假设有一处用到;\" >%d.data" % (date,date)
        print sql
        os.system(sql)
    

    以上脚本测试成功后,可以让linux环境下自动执行,假设上述脚本为test.py具体操作如下:

    nohup python test.py & ---已经自动执行
    自动执行时会生成执行文件nohup.out,可以查看文件是否执行成功或者执行到什么地步,cat nohup.out
    退出shell环境时,不要像平常一样直接简单粗暴右上角点叉叉,用exit,我们这次温柔一点。
    

    所有分区执行完毕后,可以用cat *.data >hahaha.data将所有数据汇总到hahaha.data的文件中。然后sz hahaha.data就可以把数据下载到本地进行分析啦。

    展开全文
  • Python 版本说明 Python 是由 Guido van Rossum 开发的、可免费获得的、非常高级...本文 Linux 服务器是 Ubuntu 12.10, Python 版本 是 2.7 。如果是 Python 3.0 版本的语法上有一定的出入。另外这里笔者所说的 Pyth

    Python 版本说明
    Python 是由 Guido van Rossum 开发的、可免费获得的、非常高级的解释型语言。其语法简单易懂,而其面向对象的语义功能强大(但又灵活)。Python 可以广泛使用并具有高度的可移植性。本文 Linux 服务器是 Ubuntu 12.10, Python 版本 是 2.7 。如果是 Python 3.0 版本的语法上有一定的出入。另外这里笔者所说的 Python 是 CPython,CPython 是用 C 语言实现的 Python 解释器,也是官方的并且是最广泛使用的 Python 解释器。除了 CPython 以外,还有用 Java 实现的 Jython 和用.NET 实现的 IronPython,使 Python 方便地和 Java 程序、.NET 程序集成。另外还有一些实验性的 Python 解释器比如 PyPy。CPython 是使用字节码的解释器,任何程序源代码在执行之前先要编译成字节码。它还有和几种其它语言(包括 C 语言)交互的外部函数接口。
    回页首
    工作原理:基于/proc 文件系统
    Linux 系统为管理员提供了非常好的方法,使其可以在系统运行时更改内核,而不需要重新引导内核系统,这是通过/proc 虚拟文件系统实现的。/proc 文件虚拟系统是一种内核和内核模块用来向进程(process)发送信息的机制(所以叫做“/proc”),这个伪文件系统允许与内核内部数据结构交互,获取有关进程的有用信息,在运行中(on the fly)改变设置(通过改变内核参数)。与其他文件系统不同,/proc 存在于内存而不是硬盘中。proc 文件系统提供的信息如下:
    进程信息:系统中的任何一个进程,在 proc 的子目录中都有一个同名的进程 ID,可以找到 cmdline、mem、root、stat、statm,以及 status。某些信息只有超级用户可见,例如进程根目录。每一个单独含有现有进程信息的进程有一些可用的专门链接,系统中的任何一个进程都有一个单独的自链接指向进程信息,其用处就是从进程中获取命令行信息。
    系统信息:如果需要了解整个系统信息中也可以从/proc/stat 中获得,其中包括 CPU 占用情况、磁盘空间、内存对换、中断等。
    CPU 信息:利用/proc/CPUinfo 文件可以获得中央处理器的当前准确信息。
    负载信息:/proc/loadavg 文件包含系统负载信息。
    系统内存信息:/proc/meminfo 文件包含系统内存的详细信息,其中显示物理内存的数量、可用交换空间的数量,以及空闲内存的数量等。
    表 1 是 /proc 目录中的主要文件的说明:
    表 1 /proc 目录中的主要文件的说明
    文件或目录名称 描 述
    apm 高级电源管理信息
    cmdline 这个文件给出了内核启动的命令行
    CPUinfo 中央处理器信息
    devices 可以用到的设备(块设备/字符设备)
    dma 显示当前使用的 DMA 通道
    filesystems 核心配置的文件系统
    ioports 当前使用的 I/O 端口
    interrupts 这个文件的每一行都有一个保留的中断
    kcore 系统物理内存映像
    kmsg 核心输出的消息,被送到日志文件
    mdstat 这个文件包含了由 md 设备驱动程序控制的 RAID 设备信息
    loadavg 系统平均负载均衡
    meminfo 存储器使用信息,包括物理内存和交换内存
    modules 这个文件给出可加载内核模块的信息。lsmod 程序用这些信息显示有关模块的名称,大小,使用数目方面的信息
    net 网络协议状态信息
    partitions 系统识别的分区表
    pci pci 设备信息
    scsi scsi 设备信息
    self 到查看/proc 程序进程目录的符号连接
    stat 这个文件包含的信息有 CPU 利用率,磁盘,内存页,内存对换,全部中断,接触开关以及赏赐自举时间
    swaps 显示的是交换分区的使用情况
    uptime 这个文件给出自从上次系统自举以来的秒数,以及其中有多少秒处于空闲
    version 这个文件只有一行内容,说明正在运行的内核版本。可以用标准的编程方法进行分析获得所需的系统信息
    下面本文的几个例子都是使用 Python 脚本读取/proc 目录中的主要文件来实现实现对 Linux 服务器的监控的 。
    使用 Python 脚本实现对 Linux 服务器的监控
    对于 CPU(中央处理器)监测
    脚本 1 名称 CPU1.py,作用获取 CPU 的信息。
    清单 1.获取 CPU 的信息

    !/usr/bin/env Python

    from future import print_function
    from collections import OrderedDict
    import pprint

    def CPUinfo():
    ”’ Return the information in /proc/CPUinfo
    as a dictionary in the following format:
    CPU_info[‘proc0’]={…}
    CPU_info[‘proc1’]={…}
    ”’
    CPUinfo=OrderedDict()
    procinfo=OrderedDict() ”’一种字典类型”’

    nprocs = 0
    with open('/proc/CPUinfo') as f:
        for line in f:
            if not line.strip():    '''s.strip(rm)删除s字符串中开头和结尾,位于rm删除序列的字符,当rm为空时删除空白                   符'''
                # end of one processor
                CPUinfo['proc%s' % nprocs] = procinfo
                nprocs=nprocs+1
                # Reset
                procinfo=OrderedDict()
            else:
                if len(line.split(':')) == 2:
                    procinfo[line.split(':')[0].strip()] = line.split(':')[1].strip()#按‘:’进行分割
        else:
                    procinfo[line.split(':')[0].strip()] = ''
    
    return CPUinfo
    

    if name==’main‘:
    CPUinfo = CPUinfo()
    for processor in CPUinfo.keys(): #keys()表示字典的键值
    print(CPUinfo[processor][‘model name’])
    简单说明一下清单 1,读取/proc/CPUinfo 中的信息,返回 list,每核心一个 dict。其中 list 是一个使用方括号括起来的有序元素集合。List 可以作为以 0 下标开始的数组。Dict 是 Python 的内置数据类型之一, 它定义了键和值之间一对一的关系。OrderedDict 是一个字典子类,可以记住其内容增加的顺序。常规 dict 并不跟踪插入顺序,迭代处理时会根据键在散列表中存储的顺序来生成值。在 OrderedDict 中则相反,它会记住元素插入的顺序,并在创建迭代器时使用这个顺序。
    可以使用 Python 命令运行脚本 CPU1.py 结果见图 1

    Python CPU1.py

    Intel(R) Celeron(R) CPU E3200 @ 2.40GHz
    图 1.运行清单 1
    运行清单 1
    也可以使用 chmod 命令添加权限收直接运行 CPU1.py

    chmod +x CPU1.py

    ./CPU1.py

    对于系统负载监测
    脚本 2 名称 CPU2.py,作用获取系统的负载信息
    清单 2 获取系统的负载信息

    !/usr/bin/env Python

    import os
    def load_stat():
    loadavg = {}
    f = open(“/proc/loadavg”)
    con = f.read().split()
    f.close()
    loadavg[‘lavg_1’]=con[0]
    loadavg[‘lavg_5’]=con[1]
    loadavg[‘lavg_15’]=con[2]
    loadavg[‘nr’]=con[3]
    loadavg[‘last_pid’]=con[4]
    return loadavg
    print “loadavg”,load_stat()[‘lavg_15’]
    简单说明一下清单 2:清单 2 读取/proc/loadavg 中的信息,import os :Python 中 import 用于导入不同的模块,包括系统提供和自定义的模块。其基本形式为:import 模块名 [as 别名],如果只需要导入模块中的部分或全部内容可以用形式:from 模块名 import *来导入相应的模块。OS 模块 os 模块提供了一个统一的操作系统接口函数,os 模块能在不同操作系统平台如 nt,posix 中的特定函数间自动切换,从而实现跨平台操作。
    可以使用 Python 命令运行脚本 CPU1.py 结果见图 2 # Python CPU2.py
    图 2.运行清单 2
    运行清单 2
    对于内存信息的获取
    脚本 3 名称 mem.py,作用是获取内存使用情况信息
    清单 3 获取内存使用情况

    !/usr/bin/env Python

    from future import print_function
    from collections import OrderedDict

    def meminfo():
    ”’ Return the information in /proc/meminfo
    as a dictionary ”’
    meminfo=OrderedDict()

    with open('/proc/meminfo') as f:
        for line in f:
            meminfo[line.split(':')[0]] = line.split(':')[1].strip()
    return meminfo
    

    if name==’main‘:
    #print(meminfo())

    meminfo = meminfo()
    print('Total memory: {0}'.format(meminfo['MemTotal']))  #format()进行格式化处理
    print('Free memory: {0}'.format(meminfo['MemFree']))
    

    简单说明一下清单 3:清单 3 读取 proc/meminfo 中的信息,Python 字符串的 split 方法是用的频率还是比较多的。比如我们需要存储一个很长的数据,并且按照有结构的方法存储,方便以后取数据进行处理。当然可以用 json 的形式。但是也可以把数据存储到一个字段里面,然后有某种标示符来分割。 Python 中的 strip 用于去除字符串的首位字符,最后清单 3 打印出内存总数和空闲数。
    可以使用 Python 命令运行脚本 mem.py 结果见图 3。 # Python mem.py
    图 3.运行清单 3
    运行清单 3
    对于网络接口的监测
    脚本 4 名称是 net.py,作用获取网络接口的使用情况。
    清单 4 net.py 获取网络接口的输入和输出

    !/usr/bin/env Python

    import time
    import sys

    if len(sys.argv) > 1:
    INTERFACE = sys.argv[1]
    else:
    INTERFACE = ‘eth0’
    STATS = []
    print ‘Interface:’,INTERFACE

    def rx():
    ifstat = open(‘/proc/net/dev’).readlines()
    for interface in ifstat:
    if INTERFACE in interface:
    stat = float(interface.split()[1])
    STATS[0:] = [stat]

    def tx():
    ifstat = open(‘/proc/net/dev’).readlines()
    for interface in ifstat:
    if INTERFACE in interface:
    stat = float(interface.split()[9])
    STATS[1:] = [stat]

    print ‘In Out’
    rx()
    tx()

    while True:
    time.sleep(1)
    rxstat_o = list(STATS)
    rx()
    tx()
    RX = float(STATS[0])
    RX_O = rxstat_o[0]
    TX = float(STATS[1])
    TX_O = rxstat_o[1]
    RX_RATE = round((RX - RX_O)/1024/1024,3)
    TX_RATE = round((TX - TX_O)/1024/1024,3)
    print RX_RATE ,’MB ‘,TX_RATE ,’MB’
    简单说明一下清单 4:清单 4 读取/proc/net/dev 中的信息,Python 中文件操作可以通过 open 函数,这的确很像 C 语言中的 fopen。通过 open 函数获取一个 file object,然后调用 read(),write()等方法对文件进行读写操作。另外 Python 将文本文件的内容读入可以操作的字符串变量非常容易。文件对象提供了三个“读”方法: read()、readline() 和 readlines()。每种方法可以接受一个变量以限制每次读取的数据量,但它们通常不使用变量。 .read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。然而 .read() 生成文件内容最直接的字符串表示,但对于连续的面向行的处理,它却是不必要的,并且如果文件大于可用内存,则不可能实现这种处理。.readline() 和 .readlines() 之间的差异是后者一次读取整个文件,象 .read() 一样。.readlines() 自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for … in … 结构进行处理。另一方面,.readline() 每次只读取一行,通常比 .readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 .readline()。最后清单 4 打印出网络接口的输入和输出情况。
    可以使用 Python 命令运行脚本 net.py 结果见图 4 #Python net.py
    图 4.运行清单 4
    运行清单 4
    监控 Apache 服务器进程的 Python 脚本
    Apache 服务器进程可能会因为系统各种原因而出现异常退出,导致 Web 服务暂停。所以笔者写一个 Python 脚本文件:
    清单 5 crtrl.py 监控 Apache 服务器进程的 Python 脚本

    !/usr/bin/env Python

    import os, sys, time

    while True:
    time.sleep(4)
    try:
    ret = os.popen(‘ps -C apache -o pid,cmd’).readlines()
    if len(ret) < 2:
    print “apache 进程异常退出, 4 秒后重新启动”
    time.sleep(3)
    os.system(“service apache2 restart”)
    except:
    print “Error”, sys.exc_info()[1]
    设置文件权限为执行属性(使用命令 chmod +x crtrl.py),然后加入到/etc/rc.local 即可,一旦 Apache 服务器进程异常退出,该脚本自动检查并且重启。 简单说明一下清单 5 这个脚本不是基于/proc 伪文件系统的,是基于 Python 自己提供的一些模块来实现的 。这里使用的是 Python 的内嵌 time 模板,time 模块提供各种操作时间的函数。
    回页首
    总结
    在实际工作中,Linux 系统管理员可以根据自己使用的服务器的具体情况编写一下简单实用的脚本实现对 Linux 服务器的监控。本文介绍一下使用 Python 脚本实现对 Linux 服务器 CPU 、系统负载、内存和 网络使用情况的监控脚本的编写方法。

    展开全文
  • # coding=utf-8 import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ...
  • 来源:http://www.ibm.com/developerworks/cn/linux/1312_caojh_pythonlinux/ 曹 江华, 系统管理员, 中科思密达有限公司目前 Linux 下有一些使用 Python 语言编写的 Linux 系统监控工具 比如 inotify-sync(文件...
  • 有这样的需求,曾经面试也遇到过,但是从来没有考虑过如何操作,最近在学python,就尝试一下,python基本数据类型及其操作加循环搞定,方法笨拙,有合适好的方法忘指点一下,谢谢各位大佬 代码如下: test=...
  •  Linux下文件和目录的特点: Linux文件或目录名称最长可以有256个字符 以 . 开头的文件为隐藏文件,需要用-a参数才能显示(all ) . 代表当前目录 .. 代表上一级目录  ls常用选项:  -a:显示指定目录下左右...
  • 一、前言 二、概述 三、Python 版本说明 四、/proc 文件系统 ...九、监控apache服务器进程的Python脚本 ...注,测试环境 CentOS 6.4 x86_64,Python 版本 Python 2.6.6。 一、前言
  • linux 下的python 字符串

    2019-05-06 17:32:43
    一、字符串特性 1. 字符串定义 单引号可以通过\ 转义符转义输出,也可以在双引号中输出 2. 索引 字符串具有索引,可通过索引查看指定字符 索引从0 开始 3. 切片 切片规则:s[start:end:step] ......
  • 管道是Linux 支持的最初Unix IPC形式之一,具有以下特点: 管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道; 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程); 单独构成一...
  • ssh远程管理linux系统(SecureCRT远程操作linux系统) 常见在window系统下远程操作linux系统的软件有SecureCRT、XShell等很多,SecureCRT:界面很好看 功能强大,SecureCRT官方下载网址。 本人用的是SecureCRT_...
  • 今天在公司搞了半天EE2I,一直在敲相同的命令累死了。...所以晚上回到家就写了个类似的python脚本来自动化执行这些讨厌的重复工作,也顺便多学点python的知识。 import os  import sys  imp
1 2 3 4 5 ... 20
收藏数 16,727
精华内容 6,690