sys模块:负责程序和Python交互。
sys常用方法:===========================
sys.stdout.write('please:')
val = sys.stdin.readline()[:-1]
sys.argv() # 命令行参数List,第一个元素是程序本身路径 sys.modules.keys() # 返回所有已经导入的模块列表 sys.exc_info() # 获取当前正在处理的异常类,exc_type、exc_value、exc_traceback当前处理的异常详细信息 sys.exit(n) # 退出程序,正常退出时exit(0) sys.hexversion # 获取Python解释程序的版本值,16进制格式如:0x020403F0 sys.version # 获取Python解释程序的版本信息 sys.maxint # 最大的Int值 sys.maxunicode # 最大的Unicode值 sys.modules # 返回系统导入的模块字段,key是模块名,value是模块 sys.path # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform # 返回操作系统平台名称 sys.stdout # 标准输出 sys.stdin # 标准输入
sys.stderr # 错误输出 sys.exc_clear() # 用来清除当前线程所出现的当前的或最近的错误信息 sys.exec_prefix # 返回平台独立的python文件安装的位置 sys.byteorder # 本地字节规则的指示器,big-endian平台的值是'big',little-endian平台的值是'little' sys.copyright # 记录python版权相关的东西 sys.api_version # 解释器的C的API版本
os模块:和系统交互的模块
提供对操作系统进行调用的接口
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd os.curdir 返回当前目录: ('.') os.pardir 获取当前目录的父目录字符串名:('..') os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.remove() 删除一个文件 os.rename("oldname","newname") 重命名文件/目录 os.stat('path/filename') 获取文件/目录信息 os.sep 输出操作系统特定的路径分隔符,win下为"\",Linux下为"/" os.linesep 输出当前平台使用的行终止符,win下为" ",Linux下为" " os.pathsep 输出用于分割文件路径的字符串 os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' os.system("bash command") 运行shell命令,直接显示 os.environ 获取系统环境变量 os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以/或结尾,那么就会返回空值。即os.path.split(path)的第二个元素 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False os.path.isabs(path) 如果path是绝对路径,返回True os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.getpid() #返回当前进程pid
os.getppid() #返回当前进程的父进程pid
补充:os.system()执行命令,返回只有状态码 0 获取其它执行失败状态码。
那么如何python执行系统命令的返回值如何获取呢?哈哈
需要一个新的知识:os.popen('命令').read()
import os while True: cmd = input('请输入要执行的系统命令:').strip() res = os.popen(cmd).read() print(res)
输入出如下

请输入要执行的系统命令:dir 驱动器 C 中的卷没有标签。 卷的序列号是 1CC3-8410 C:UsersAdministratorDesktopPython3_studyday7 的目录 2018/06/18 10:18 <DIR> . 2018/06/18 10:18 <DIR> .. 2018/06/18 10:18 182 os-popen()学习测试.py 2018/06/18 10:14 681 socket_client.py 2018/06/18 10:14 1,075 socket_server.py 2018/06/17 16:02 43 __init__.py 4 个文件 1,981 字节 2 个目录 6,857,170,944 可用字节 执行/输出
os.fork()理解 派生一个子进程,两个返回值,子进程中返回值0;当前进程中返回子进程的pid(非0值)
子进程和父进程之间的任何变量不共享,互不影响

# -*- coding: utf-8 -*- import time import os #创建子进程前声明的变量 number = 7 try: #fork子进程,返回两个同名变量分别在当前进程和子进程中 #(变量名:fork_result,在当前进程中被赋值为子进程pid号,在子进程中被赋值为0) fork_result = os.fork() if fork_result == 0: '''到这里时父进程还没结束,子进程的父进程ID没变''' print("this is child process, pid:{pid},ppid:{ppid}".format(pid=os.getpid(),ppid=os.getppid())) number -=1 print('子进程中测试变量%d 子进程睡2S'%number) time.sleep(2) '''到这里父进程已经结束,子进程称为独立进程被系统接管,父进程号变为1''' print("this is child process, pid:{pid},ppid:{ppid}".format(pid=os.getpid(),ppid=os.getppid())) else: print("this is parent process,pid:{pid},ppid:{ppid}".format(pid=os.getpid(),ppid=os.getppid())) print('测试变量 %d 父进程睡1S' % number) time.sleep(1) except OSError as e: print("fork 子进程失败")

(base) [root@vm192-168-3-2 opt]# python daemon_process2.py this is parent process,pid:23107,ppid:7301 测试变量 7 父进程睡1S this is child process, pid:23108,ppid:23107 子进程中测试变量6 子进程睡2S (base) [root@vm192-168-3-2 opt]# this is child process, pid:23108,ppid:1

#!/usr/bin/env python # -*- coding:utf-8 -*- from app import create_server import os,sys #启动入口 if __name__ == "__main__": usage = "USAGE:%s start| stop" % __file__ cmd = sys.argv[1] if sys.argv.__len__() >=2 else sys.exit(usage) pidfile = 'manager.pid' #命令行参数控制 if cmd == 'start': if os.path.isfile(pidfile): print('%s already running' % __file__) sys.exit(1) elif cmd == 'stop': try : with open(pidfile,'r') as pidnum: os.system('kill %s' % pidnum.read()) os.remove(pidfile) print('kill manager ') sys.exit(0) except FileNotFoundError : print('%s is not running' % __file__) sys.exit(1) else: print(usage) #执行程序 try: fork_result = os.fork() if fork_result == 0: fork_process_pid = os.getpid() print('daemon process %s start success, pid is : %s' %( __file__, fork_process_pid)) server = create_server() server.start() else: f = open(pidfile,'w') f.write(str(fork_result)) f.close() except OSError as e: print('