TA的每日心情 | 无聊 2015-8-17 09:38 |
---|
签到天数: 361 天 连续签到: 1 天 [LV.8]以坛为家I
|
本帖最后由 懒兔子 于 2015-5-28 22:33 编辑
1. Python系统库
Python内部集成了与系统相关的函数库(或称模块),本节主要介绍sys和os两个库。
sys是系统参数和功能库,用来支持Python解释器的运行,其中保存了一些Python解释器使用或维护的变量。os库是混合操作系统接口,杂糅了各种获取操作系统信息和访问操作系统的函数。
1.1. sys模块
如果想要使用sys 模块只需要对其进行引用:
我们可以在IDLE中测试sys模块的功能。下面为sys模块中一些常用的功能:
表1 sys 模块常用功能
参数 | 描述 | sys.platform | 显示操作系统名称 | sys.version | 显示Python解释器版本 | sys.copyright | 显示解释器版权 | sys.path | 显示Python模块的搜索路径(import的时候从这些路径查找模块) | sys.argv[] | 参数列表,使用该功能可以在命令行运行Python脚本时追加参数 |
图 树莓派(Linux)中执行效果
图 Windows中执行效果
sys.argv是一个数组,argv[0]表示本程序的名称,argv[1]表示第1个参数,argv[2]表示第2个参数,以此类推。下面的代码演示了sys.argv的使用效果:
- import sys
- for strArg in sys.argv:
- print(strArg)
复制代码
在终端中执行代码:
- $ python show_args.py arg1 arg2 arg3 arg4 arg5
复制代码
图 sys.argv使用效果
1.2. os模块
与sys模块相同,使用os模块前需要引用操作:
下面为sys模块中一些常用的功能:
表2 os模块常用功能
参数 | 描述 | os.uname() | 显示操作系统信息:系统名称、主机名、版本、发布时间和硬件平台 | os.getlogin() | 显示当前登录的用户名 | os.getpid() | 显示本进程的进程号 | os.kill(pid, signal) | 向指定PID的进程发送信号 | os.getcwd() | 获取当前路径 | os.chdir(path) | 改变当前路径 | os.mkdir(path) | 创建目录 | os.rmdir(path) | 删除(非空)目录 | os.rename(src, dst) | 重命名文件,将src重命名为dst | os.remove(path) | 删除文件(不能删除目录) | os.system(command) | 调用shell执行指令,阻塞执行 | os.popen(command) | 与os.system类似,非阻塞执行,可以对命令的返回结果进行操作 | os.fork() | 创建子进程 | os.pipe() | 用于进程间通信 |
图 调用os模块
fork和pipe函数我们会在后面的多进程操作中讲到,这里首先介绍如果通过system和popen函数调用来执行系统命令。
os.system()非常适合执行简单的shell命令,等同于在shell下进行输入。命令如果执行成功会返回0,执行结果会通过终端输出。需要注意的是,os.system()以阻塞方式执行,程序将等待os.system()调用的命令执行完成后才继续运行。下面是一个简单的测试程序:
- import os
- print("Running date command...")
- ret = os.system("date")
- print("Return number: %d\n" %ret)
- print("Running uname command...")
- ret = os.system("uname -a")
- print("Return number: %d\n" %ret)
- print("Running an incorrect command...")
- ret = os.system("incorrect_command")
- print("Return number: %d\n" %ret)
复制代码
运行结果
os.popen()不会阻塞程序的运行,并且可以对shell命令返回的结果进行处理。下面的代码演示了如何通过os.popen()函数监控内存使用率,同样的操作可以应用于获取各种系统信息。
- import os
- import time
- import re
- while True:
- # Get memory usage info
- cpuinfo = os.popen("free -m | grep Mem")
- strMem = cpuinfo.readline()
- # Get all the number from string
- numMem = re.findall("\d+", strMem)
- print("Total memory: %sMB, Used memory: %sMB, Memory usage:%d%%" \
- %(numMem[0], numMem[1], int(numMem[1])*100/int(numMem[0])))
- time.sleep(3)
复制代码
其实这里只是提取了free命令返回的数据。re.findall()函数通过正则表达式将字符串中的整数本分都提取出来并保存为数组。
运行效果
|
|