OS模块
os 模块提供了很多允许你的程序与操作系统直接交互的功能。
不带path的方法 |
os.system() # 执行shell命令,保存的是执行结果,0或1
>>> os.system('df -h') Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/disk1 112Gi 64Gi 47Gi 58% 16897618 12424108 58% / devfs 179Ki 179Ki 0Bi 100% 621 0 100% /dev map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /home 0 # linux命令执行返回值
os.popen() # 将系统交互内存保存到内存中,往往可以搭配read方法处理交互结果
>>> os.popen('df -h') <os._wrap_close object at 0x103978160> >>> f = os.popen('du -sh /Users/hqs') >>> f.read() '2.6G\t/Users/hqs\n' >>> f = os.popen('du -sh /Users/hqs') >>> f.readlines() ['2.6G\t/Users/hqs\n']
os.getcwd() # 得到当前工作目录,即当前Python解释器的目录路径
# vi /Users/huangqiushi/PycharmProjects/checkServer/test_os.py import os print(os.getcwd()) # cd / # python /Users/huangqiushi/PycharmProjects/checkServer/test_os.py 输出:/ # cd /tmp # python /Users/huangqiushi/PycharmProjects/checkServer/test_os.py 输出/tmp
os.chdir('dirname') # 改变工作目录到dirname
>>> os.getcwd() '/Users/hqs/PycharmProjects/checkServer' >>> os.chdir('/tmp') >>> os.getcwd() '/private/tmp'
os.listdir() # 返回指定目录下所有文件和目录名
>>> import os >>> os.listdir('.') ['.DS_Store', 'atm_shopmall', 'atm_shopmall.zip', 'startMyPython3.0'] >>> os.listdir() # 默认目录就是当前目录 ['.DS_Store', 'atm_shopmall', 'atm_shopmall.zip', 'startMyPython3.0']
os.rename() # 对一个文件改名
>>> os.listdir(os.getcwd()) ['.idea', 'checkCpu.py', 'checkServer.py', 'test_os.py'] >>> os.rename('test_os.py','test_new.py') >>> os.listdir(os.getcwd()) ['.idea', 'checkCpu.py', 'checkServer.py', 'test_new.py']
os.remove() # 删除一个文件的方法
>>> os.remove('atm_shopmall.zip') >>> os.listdir() ['.DS_Store', 'atm_shopmall', 'startMyPython3.0']
os.chmod('file') # 修改文件权限和时间戳
>>> os.chmod("test_new.py",755)
os.mkdirs() # 创建多级目录
>>> os.makedirs('home/hqs/test/练习.py') >>> os.listdir('home/hqs/test/') ['练习.py']
os.mkdir() # 创建单个目录(不会递归,父目录不存在将报错)
os.stat('file') # 获取文件属性(主要用来获取文件大小)
>>> os.listdir(".") ['.idea', 'checkCpu.py', 'checkServer.py', 'home', 'test_new.py'] >>> os.stat(".") os.stat_result(st_mode=16877, st_ino=6423017, st_dev=16777220, st_nlink=7, st_uid=501, st_gid=20, st_size=238, st_atime=1519638374, st_mtime=1519638170, st_ctime=1519638170) >>> os.stat("test_new.py") os.stat_result(st_mode=33188, st_ino=8278124, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=91, st_atime=1519634046, st_mtime=1519634046, st_ctime=1519634046)
def _get(self, data): """ 客户端从服务器下载文件 1、拿到文件名 2、判断文件是否存在 2.1、如果存在返回状态码和文件大小 2.1.1 打开文件,发送数据 2.2、如果不存在,返回状态码 :param data: :return: """ filename = data.get('filename') # 拿到文件名,data在handle方法中 full_path = os.path.join(self.user_obj.home, filename) # 家目录和文件名拼起来 if os.path.isfile(full_path): # 判断文件是否存在 filesize = os.stat(full_path).st_size # os.stat获取文件属性,st_size为文件大小 self.send_response(301, filesize=filesize)
os.linesep # 返回当前平台使用的行终止符
>>> os.linesep '\n' # Linux/OS X都是使用'\n' windows使用'\r\n'
os.name # 提示正在使用的平台
>>> os.name 'posix' # 对于Linux/Unix用户,都是"posix" windows是"nt"
os.getenv("HOME") # 读取操作系统环境变量的值
>>> import os >>> os.getenv("HOME") '/Users/hqs' >>> os.getenv('PATH') '/Library/Frameworks/Python.framework/Versions/3.6/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public'
os.environ # 返回操作系统所有的环境变量
>>> os.environ environ({'TERM_PROGRAM': 'Apple_Terminal', 'SHELL': '/bin/bash', 'TERM': 'xterm-256color', 'TMPDIR': '/var/folders...})
os.environ.setdefault('HOME', '/home/hqs') # 没有就添加字典,有则返回
###############django项目manage.py文件############### import os import sys if __name__ == "__main__": # environ:返回操作系统所有的环境变量 # os.environ.setdefault('HOME', '/home/hqs') # 没有就添加字典,有则返回 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "alipay.settings") try: from django.core.management import execute_from_command_line except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed and " "available on your PYTHONPATH environment variable? Did you " "forget to activate a virtual environment?" ) from exc execute_from_command_line(sys.argv)
os.get_terminal_size() # 获取终端大小
>>> os.get_terminal_size() os.terminal_size(columns=80, lines=25) # 能写25行,每行可以写入80个字符
os.kill() # 杀死进程
>>> os.system('sleep 100000') >>> os.system('ps aux|grep sleep') hqs 5164 0.0 0.0 2434840 776 s000 S+ 6:10下午 0:00.00 grep sleep hqs 5162 0.0 0.0 2444652 1072 s000 S+ 6:10下午 0:00.01 sh -c ps aux|grep sleep hqs 5141 0.0 0.0 2434824 364 s000 S 6:04下午 0:00.00 sleep 100000 >>> import signal >>> os.kill(5164,signal.SIGILL)
带PATH的方法 |
os.path.isfile() # 判断是否是一个文件
os.path.isdir() # 判断是否是一个目录
os.path.isabs() # 判断是否是绝对路径
os.path.exists() # 检查路径是否真的存在(文件或目录)
>>> os.path.exists("/Users/hqs/PycharmProjects/startMyPython3.0") True >>> os.path.exists("sys_module.py") False
os.path.split() # 返回一个路径的目录名和文件名
>>> os.path.split("sys_module.py") ('', 'sys_module.py') >>> os.path.split("/Users/hqs/PycharmProjects/startMyPython3.0") ('/Users/hqs/PycharmProjects', 'startMyPython3.0') >>> os.path.split("/Users/hqs/PycharmProjects/startMyPython3.0/第五章-面向 象 /21 property的使用.py") ('/Users/hqs/PycharmProjects/startMyPython3.0/第五章-面向对象', '21 property的使用.py')
os.path.splitext() # 分离扩展名
>>> os.path.splitext("/Users/hqs/PycharmProjects/startMyPython3.0/第五章-面向对 象/21 property的使用.py") ('/Users/hqs/PycharmProjects/startMyPython3.0/第五章-面向对象/21 property的使用', '.py') >>> os.path.splitext("sys_module.py") ('sys_module', '.py')
os.path.dirname() # 获取当前路径名
>>> os.path.dirname('/home/hqs') '/home' >>> os.path.dirname('/home') '/' >>> os.path.dirname('/Users/hqs/PycharmProjects/startMyPython3.0') '/Users/hqs/PycharmProjects'
os.path.abspath() # 获取绝对路径
>>> os.path.abspath('.') '/Users/hqs/PycharmProjects/startMyPython3.0' >>> os.path.abspath('/home') '/home'
os.path.basename() # 获取文件名
>>> os.path.basename('/home') 'home' >>> os.path.basename('/Users/hqs/PycharmProjects/startMyPython3.0') 'startMyPython3.0' >>> os.path.basename('/Users/hqs/PycharmProjects/startMyPython3.0/第一章-基础语法') '第一章-基础语法'
os.path.getsize('filename') # 获取文件大小
>>> os.path.getsize('test_new.py') 91
os.path.join('dir', 'filename') # 结合目录名和文件名
>>> os.path.join('root','test','练习.py') 'root/test/练习.py'