python中os與sys作用與區別


OS模塊

在自動化測試中,經常需要查找操作文件,比如說查找配置文件(從而讀取配置文件的信息),查找測試報告(從而發送測試報告郵件),經常要對大量文件和大量路徑進行操作,這就依賴於os模塊,所以今天整理下比較常用的幾個方法。網上這方面資料也很多,每次整理,只是對自己所學的知識進行梳理,從而加深對某個模塊的使用。

#OS模塊
 
#os模塊就是對操作系統進行操作,使用該模塊必須先導入模塊:
import os
 
#getcwd() 獲取當前工作目錄(當前工作目錄默認都是當前文件所在的文件夾)
result = os.getcwd()
print(result)
 
#chdir()改變當前工作目錄
os.chdir('/home/sy')
result = os.getcwd()
print(result)
 
open('02.txt','w')
 
#操作時如果書寫完整的路徑則不需要考慮默認工作目錄的問題,按照實際書寫路徑操作
open('/home/sy/下載/02.txt','w')
 
#listdir() 獲取指定文件夾中所有內容的名稱列表
result = os.listdir('/home/sy')
print(result)
 
#mkdir()  創建文件夾
#os.mkdir('girls')
#os.mkdir('boys',0o777)
 
#makedirs()  遞歸創建文件夾
#os.makedirs('/home/sy/a/b/c/d')
 
#rmdir() 刪除空目錄
#os.rmdir('girls')
 
#removedirs 遞歸刪除文件夾  必須都是空目錄
#os.removedirs('/home/sy/a/b/c/d')
 
#rename() 文件或文件夾重命名
#os.rename('/home/sy/a','/home/sy/alibaba'
#os.rename('02.txt','002.txt')
 
#stat() 獲取文件或者文件夾的信息
#result = os.stat('/home/sy/PycharmProject/Python3/10.27/01.py)
#print(result)
 
#system() 執行系統命令(危險函數)
#result = os.system('ls -al')  #獲取隱藏文件
#print(result)
 
#環境變量
'''
環境變量就是一些命令的集合
操作系統的環境變量就是操作系統在執行系統命令時搜索命令的目錄的集合
'''
#getenv() 獲取系統的環境變量
result = os.getenv('PATH')
print(result.split(':'))
 
#putenv() 將一個目錄添加到環境變量中(臨時增加僅對當前腳本有效)
#os.putenv('PATH','/home/sy/下載')
#os.system('syls')
 
#exit() 退出終端的命令
 
#os模塊中的常用值
#curdir  表示當前文件夾   .表示當前文件夾  一般情況下可以省略
print(os.curdir)
 
#pardir  表示上一層文件夾   ..表示上一層文件夾  不可省略!
print(os.pardir)
 
#os.mkdir('../../../man')#相對路徑  從當前目錄開始查找
#os.mkdir('/home/sy/man1')#絕對路徑  從根目錄開始查找
 
#name 獲取代表操作系統的名稱字符串
print(os.name) #posix -> linux或者unix系統  nt -> window系統
 
#sep 獲取系統路徑間隔符號  window ->\    linux ->/
print(os.sep)
 
#extsep 獲取文件名稱和后綴之間的間隔符號  window & linux -> .
print(os.extsep)
 
#linesep  獲取操作系統的換行符號  window -> \r\n  linux/unix -> \n
print(repr(os.linesep))
 
 
 
#導入os模塊
import os
 
#以下內容都是os.path子模塊中的內容
 
#abspath()  將相對路徑轉化為絕對路徑
path = './boys'#相對
result = os.path.abspath(path)
print(result)
 
#dirname()  獲取完整路徑當中的目錄部分  &  basename()獲取完整路徑當中的主體部分
path = '/home/sy/boys'
result = os.path.dirname(path)
print(result)
 
result = os.path.basename(path)
print(result)
 
#split() 將一個完整的路徑切割成目錄部分和主體部分
path = '/home/sy/boys'
result = os.path.split(path)
print(result)
 
#join() 將2個路徑合並成一個
var1 = '/home/sy'
var2 = '000.py'
result = os.path.join(var1,var2)
print(result)
 
#splitext() 將一個路徑切割成文件后綴和其他兩個部分,主要用於獲取文件的后綴
path = '/home/sy/000.py'
result = os.path.splitext(path)
print(result)
 
#getsize()  獲取文件的大小
#path = '/home/sy/000.py'
#result = os.path.getsize(path)
#print(result)
 
#isfile() 檢測是否是文件
path = '/home/sy/000.py'
result = os.path.isfile(path)
print(result)
 
#isdir()  檢測是否是文件夾
result = os.path.isdir(path)
print(result)
 
#islink() 檢測是否是鏈接
path = '/initrd.img.old'
result = os.path.islink(path)
print(result)
 
#getctime() 獲取文件的創建時間 get create time
#getmtime() 獲取文件的修改時間 get modify time
#getatime() 獲取文件的訪問時間 get active time
 
import time
 
filepath = '/home/sy/下載/chls'
 
result = os.path.getctime(filepath)
print(time.ctime(result))
 
result = os.path.getmtime(filepath)
print(time.ctime(result))
 
result = os.path.getatime(filepath)
print(time.ctime(result))
 
#exists() 檢測某個路徑是否真實存在
filepath = '/home/sy/下載/chls'
result = os.path.exists(filepath)
print(result)
 
#isabs() 檢測一個路徑是否是絕對路徑
path = '/boys'
result = os.path.isabs(path)
print(result)
 
#samefile() 檢測2個路徑是否是同一個文件
path1 = '/home/sy/下載/001'
path2 = '../../../下載/001'
result = os.path.samefile(path1,path2)
print(result)
 
 
#os.environ 用於獲取和設置系統環境變量的內置值
import os
#獲取系統環境變量  getenv() 效果
print(os.environ['PATH'])
 
#設置系統環境變量 putenv()
os.environ['PATH'] += ':/home/sy/下載'
os.system('chls')

SYS模塊

該模塊提供對解釋器使用或維護的一些變量的訪問,以及與解釋器強烈交互的函數。它始終可用

#!/usr/bin/env python
# coding=utf-8
__author__ = 'Luzhuo'
__date__ = '2017/5/8'
# sys_demo.py sys解釋器相關函數
# 該模塊含有解釋器的一些變量,與解釋器交互的函數
 
 
import sys
 
 
def sys_demo():
    # 默認編碼
    print(sys.getdefaultencoding())
 
    # Python版本
    print(sys.version)
 
    # 添加模塊路徑到搜索路徑
    sys.path.append("./module")
 
    # (函數)打印異常信息
    try:
        1 / 0
    except:
        types, value, back = sys.exc_info()  # 捕獲異常
        sys.excepthook(types, value, back)  # 打印異常
 
    # 輸入和輸出
    sys.stdout.write(">> ")
    sys.stdout.flush()
    strs = sys.stdin.readline()[:-1]
    sys.stderr.write("輸入的內容為: {}".format(strs))
    sys.stderr.flush()
 
 
def sys_func():
    lists = sys.argv  # 傳遞給Python腳本的命令行參數列表 => python p.py -> ['p.py'] / python p.py a 1 -> ['p.py', 'a', '1'] / 程序內執行 -> ['']
    strs = sys.getdefaultencoding()  # 默認字符集名稱
    strs = sys.getfilesystemencoding()  # 系統文件名字符集名稱
    num = sys.getrefcount(object)  # 返回object的引用計數(比實際多1個)
    dicts = sys.modules  # 已加載的模塊, 可修改, 但不能通過修改返回的字典進行修改
    lists = sys.path  # 模塊搜索路徑
    sys.path.append("./test")  # 動態添加模塊搜索路徑
    strs = sys.platform  # 平台標識符(系統身份進行詳細的檢查,推薦使用) Linux:'linux' / Windows:'win32' / Cygwin:'cygwin' / Mac OS X:'darwin'
    strs = sys.version  # python解釋器版本
    lists = sys.thread_info  # 線程信息
    num = sys.api_version  # 解釋器C API版本
 
    types, value, back = sys.exc_info()  # 捕獲異常 詳見 異常 文章的 excep() 代碼塊第二小部分(http://blog.csdn.net/rozol/article/details/69313164)
    sys.excepthook(types, value, back)  # 打印異常
    types = sys.last_type
    value = sys.last_value
    back = sys.last_traceback
    # sys.exit([arg]) // 引發SystemExit異常退出Python(可以try), 范圍[0,127], None==0, "string"==1
    sys.exit(0)
 
    num = sys.getrecursionlimit()  # 最大遞歸數(堆棧最大深度), 詳見 函數 文章(http://blog.csdn.net/rozol/article/details/69242050)
    sys.setrecursionlimit(5000)  # 修改最大遞歸數
 
    fnum = sys.getswitchinterval()  # 獲取線程切換間隔
    sys.setswitchinterval(0.005)  # 設置線程切換間隔, 單位秒
    num = sys.getcheckinterval()  # 解釋器的檢查間隔
    sys.setcheckinterval(100)  # 設置解釋器檢查間隔, 執行(默認)100個虛擬指令執行一次檢查, 值為<=0時,檢查每個虛擬指令
 
    # sys.stdin // 標准輸入流
    strs = sys.stdin.readline()[:-1]
    # sys.stdout // 標准出入輸出
    sys.stdout.write(">>")
    sys.stdout.flush()
    # sys.stderr // 標注錯誤流
    sys.stderr.write(">>")
 
    # ---
 
    lists = sys.builtin_module_names  # 所有模塊 (注:非導入模塊)
    path = sys.base_exec_prefix  # Python安裝路徑
    path = sys.base_prefix  # 同base_exec_prefix
    path = sys.exec_prefix  # 同base_exec_prefix
    path = sys.prefix  # 同base_exec_prefix
    path = sys.executable  # Python解釋器的絕對路徑
 
    strs = ys.byteorder  # 本機字節順序指示器, big-endian(最高有效字節在第一位)值為'big', little-endian(最低有效字節在第一位)值為'little'
    strs = sys.copyright  # python版權
    num = sys.hexversion  # 16進制版本號
    lists = sys.implementation  # 當前運行的解釋器的信息
    num = sys.getallocatedblocks()  # 解釋器當前分配的內存塊的數量
    boolean = sys.dont_write_bytecode  # 是否不會嘗試導入源模塊是寫入.pyc文件 (False會寫入.pyc文件)
    # sys.getsizeof(object[, default]) // 返回對象的大小bit, 只計算自身內存消耗,不計算引用對象的內存消耗, 調用對象的__sizeof__(), default沒有獲取到默認返回值
    num = sys.getsizeof(object)
    boolean = sys.is_finalizing()  # 解釋器是否正在被關機
    num = sys.maxsize  # 最大整數值(2 ** 31 -1), 與系統有關
    num = sys.maxunicode  # 最大Unicode值的整數 (1114111)
    strs = sys.ps1  # 解釋器主提示符
    strs = sys.ps2  # 解釋器次提示符
 
    sys.call_tracing(func, ("arg",))  # 調用函數
    sys._clear_type_cache()  # 清除內部類型緩存
    sys._debugmallocstats()  # 打印CPython內存分配器狀態的低級信息
 
    sys.setprofile(profilefunc)  # 設置profile函數, 默認None
    sys.getprofile()  # 獲取profile函數
    sys.settrace(tracefunc)  # 設置跟蹤函數, def tracefunc(frame、event 和arg):
    sys.gettrace()  # 獲取跟蹤函數, 默認None
    sys.set_coroutine_wrapper(wrapper)  # 設置包裝 def wrapper(coro):
    sys.get_coroutine_wrapper()  # 包裝, 默認None
 
 
if __name__ == "__main__":
    sys_demo()
 
    # sys_func()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM