查看: 4135|回复: 4

【懒兔子玩树莓】os, sys —— Python系统编程

[复制链接]
  • TA的每日心情
    无聊
    2015-8-17 09:38
  • 签到天数: 361 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2015-5-28 22:27:51 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 懒兔子 于 2015-5-28 22:33 编辑

    1. Python系统库
    Python内部集成了与系统相关的函数库(或称模块),本节主要介绍sys和os两个库。
    sys是系统参数和功能库,用来支持Python解释器的运行,其中保存了一些Python解释器使用或维护的变量。os库是混合操作系统接口,杂糅了各种获取操作系统信息和访问操作系统的函数。

    1.1. sys模块
    如果想要使用sys 模块只需要对其进行引用:
    1. import 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的使用效果:
    1. import sys

    2. for strArg in sys.argv:
    3.         print(strArg)
    复制代码

    在终端中执行代码:
    1. $ python show_args.py arg1 arg2 arg3 arg4 arg5
    复制代码


    图 sys.argv使用效果


    1.2. os模块
    与sys模块相同,使用os模块前需要引用操作:
    1. import 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()调用的命令执行完成后才继续运行。下面是一个简单的测试程序:
    1. import os

    2. print("Running date command...")
    3. ret = os.system("date")
    4. print("Return number: %d\n" %ret)

    5. print("Running uname command...")
    6. ret = os.system("uname -a")
    7. print("Return number: %d\n" %ret)

    8. print("Running an incorrect command...")
    9. ret = os.system("incorrect_command")
    10. print("Return number: %d\n" %ret)
    复制代码




    运行结果


    os.popen()不会阻塞程序的运行,并且可以对shell命令返回的结果进行处理。下面的代码演示了如何通过os.popen()函数监控内存使用率,同样的操作可以应用于获取各种系统信息。
    1. import os
    2. import time
    3. import re

    4. while True:
    5.     # Get memory usage info
    6.     cpuinfo = os.popen("free -m | grep Mem")
    7.     strMem = cpuinfo.readline()

    8.     # Get all the number from string
    9.     numMem = re.findall("\d+", strMem)
    10.     print("Total memory: %sMB, Used memory: %sMB, Memory usage:%d%%" \
    11.         %(numMem[0], numMem[1], int(numMem[1])*100/int(numMem[0])))

    12.     time.sleep(3)
    复制代码

    其实这里只是提取了free命令返回的数据。re.findall()函数通过正则表达式将字符串中的整数本分都提取出来并保存为数组。




    运行效果


    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-5-9 12:20
  • 签到天数: 350 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2015-5-28 22:36:35 | 显示全部楼层
    版块主人公出场了!!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-5-9 12:20
  • 签到天数: 350 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2015-5-28 22:53:42 | 显示全部楼层
    经过楼主的讲解,这样对Python的这两个模块就了然于心了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-8-15 09:30
  • 签到天数: 162 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-6-1 09:10:47 | 显示全部楼层
    经过楼主的讲解,这样对Python的这两个模块就了然于心了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2023-7-25 22:49
  • 签到天数: 385 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-8-14 13:51:16 | 显示全部楼层
    不错学习了。。。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 21:22 , Processed in 0.144401 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.