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'

 

posted @ 2018-03-25 19:47  休耕  阅读(437)  评论(0编辑  收藏  举报