首頁  >  文章  >  後端開發  >  Python常用標準函式庫及第三方函式庫2-sys模組

Python常用標準函式庫及第三方函式庫2-sys模組

王林
王林轉載
2023-04-10 14:56:261788瀏覽

一、sys模組簡介

前面介紹的os模組主要面向作業系統,而本篇的sys模組則主要針對的是Python解釋器。

sys模組是Python自帶的模組,它是與Python解釋器互動的一個介面。 sys 模組提供了許多函數和變數來處理 Python 執行環境的不同部分。

二、sys模組常用方法

透過dir()方法可以檢視sys模組中帶有哪些方法:

import sys

print(dir(sys))

Python常用標準函式庫及第三方函式庫2-sys模組

1.sys.argv-取得命令列參數

sys.argv作用是實作從程式外部傳遞參數,它能夠取得命令列參數清單。 argv列表包含了所有傳遞給腳本的參數:

  • sys.argv[0]:表示程式本身
  • sys.argv[1]:表示程式的第一個參數
  • sys.argv[2]:表示程式的第二個參數
import sys

for index, arg in enumerate(sys.argv):
print(index, arg)

#在Python命令列執行此腳本檔案(未帶任何參數時),取得到的第一個元素是腳本本身。列印結果為:

Python常用標準函式庫及第三方函式庫2-sys模組

在Python命令列執行此腳本檔案(帶參數時),取得到的第一個元素是腳本本身,其餘的是傳遞來的參數。列印結果為:

Python常用標準函式庫及第三方函式庫2-sys模組

2.sys.exit(n)-退出程式

##sys.exit() 基本原則

sys.exit(n):

    當n為0時:正常退出
  • 當n不等於0時,非正常退出,會引發SystemExit的例外
一般情況下,程式執行到最後、解釋器就會自動退出。此時程式碼裡並沒有呼叫sys.exit(0),但實際Python解釋器在運行時呼叫sys.exit(0),運行後PyCharm編輯器會自動提示“Process finished with exit code 0”,如下:

Python常用標準函式庫及第三方函式庫2-sys模組

而當程式碼裡呼叫了sys.exit(888),也就是傳入一個非0的整數,此時執行後PyCharm編輯器會提示“Process finished with exit code 888”,如下:

Python常用標準函式庫及第三方函式庫2-sys模組

而當在程式碼裡呼叫了sys.exit(n)後,表示程序會退出,不管n是否等於0 ,即不管是正常退出還是異常退出,其後的語句都不會執行,也就是不會執行"print("Python sys.exit() 用法範例")"這句話。從下面的圖中也能看出,sys.exit(888)後的語句在PyCharm編輯器中已經泛黃提示(正常語法規範的話是不會泛黃提示的),並且運行結果也確實沒有執行sys .exit(888)後的語句:

Python常用標準函式庫及第三方函式庫2-sys模組

#sys.exit() 適用場景-控製程式中途退出

一般情況下,執行到主程式末尾,解釋器就會自動退出。上面的範例已經告訴我們,如果想要中途退出,先呼叫sys.exit(),再呼叫其他語句是行不通的,編輯器會警告提示。

如果想要自由地控製程式是否在中途退出,可以使用"sys.exit(n) 捕獲異常"的方式。其中,n可以是一個整數參數,也可以是字串參數,當n為非0的值時,就會拋出SystemExit異常,可以在主程式中對其進行捕獲:

# sys.exit()用法示例
def exit_function(value):
print("sys.exit()捕获到的value是%s" % value)
sys.exit(0)


print("start sys")

try:
sys.exit(888)
except SystemExit as value:
exit_function(value=value)

print("end sys")

①程式中途退出範例

執行結果如下:

Python常用標準函式庫及第三方函式庫2-sys模組

#執行過程分析:

##程式先執行print("start sys")
  1. 緊接著執行try語句,呼叫sys.exit(888)
  2. 接著擷取系統例外,擷取到的SystemExit例外的value值為888
  3. 最後呼叫exit_function函數,將value值888傳遞給exit_function函數
  4. 在exit_function函數中,執行語句、列印擷取到的value值,最後再呼叫sys.exit(0),退出程式
  5. ② 程式中途不退出範例

上个示例的执行结果可以看到在exit_function函数中调用sys.exit(0),此时程序就会退出,不会再执行print("end sys"),而当在exit_function函数中注释掉sys.exit(0),则会继续执行最后的代码print("end sys"),即:程序中途不退出,如下所示:

Python常用標準函式庫及第三方函式庫2-sys模組

3.sys.platform-获取当前Python运行平台

基本用法

print(sys.platform)

Windows下运行:

Python常用標準函式庫及第三方函式庫2-sys模組

Linux下运行:

Python常用標準函式庫及第三方函式庫2-sys模組

除了sys.platform外,通过platform.system()也可以获取到当前系统平台:

Windows下运行:

Python常用標準函式庫及第三方函式庫2-sys模組

Linux下运行:

Python常用標準函式庫及第三方函式庫2-sys模組

适用场景

我们都知道Python是跨平台语言,只要操作系统安装了Python环境,那么同一份Python代码就可以既运行在Linux上,也可以运行在Windows上,亦或是Mac上。

而使用sys.platform或platform.system()获取到当前系统平台名称后,我们就可以针对性地作出不同操作,例如:

linux_content = "111111"
windows_content = "222222"

# 平台为Linux,执行逻辑1、发送文本1到指定邮件
if platform.system() == "Linux":
send_email(linux_content)
# 平台为Windows,执行逻辑2、发送文本2到指定邮件
elif platform.system() == "Windows":
send_email(windows_content)

4.sys.path-返回Python相关路径

基本用法

sys.path是Python的搜索模块的路径集,供Python从中查找模块,返回一个list。

print(sys.path)

Python常用標準函式庫及第三方函式庫2-sys模組

适用场景

如果是在IDE中执行Python程序,编译器会自动把当前项目的根目录加入到包查找路径中,可以理解为添加到环境变量下,所以直接执行是没有问题的。但是在cmd或是Terminal控制台中直接使用Python相关命令来执行程序,则不会自动将当前项目加入到PYTHONPATH环境变量下,如果涉及到import其他文件夹下的变量就会报类似"ModuleNotFoundError: No module named 'xxxx'"这样的错误。

解决方法:通过sys.path.append()方法将当前项目的根目录添加到系统环境变量中:

import sys

root_path = os.path.dirname(os.path.realpath(__file__))
sys.path.append(root_path)

5.sys.stdin与sys.stdout

  • Stdin:标准输入
  • Stdout:标准输出
  • Stderr:错误流

sys.stdin 与 input()

在Python中, input() 等价于 sys.stdin.readline()

① 先来看看使用input()的实现效果

# sys.stdin 与 input
number = input("please input a number:")
print("your input number is %s" % (number))

执行效果如下:

Python常用標準函式庫及第三方函式庫2-sys模組

② 再来看看使用sys.stdin.readline()的实现效果

print("please input a number:",)# 逗号表示不换行
nn = sys.stdin.readline()
print("your input number is %s" % (nn))

执行效果如下:

Python常用標準函式庫及第三方函式庫2-sys模組

sys.stdout 与 print()

在Python中, print() 等价于 sys.stdout.readline()

① 先来看看使用print()的实现效果

# sys.stdout 与 print
print("hello world")

执行效果如下:

Python常用標準函式庫及第三方函式庫2-sys模組

② 再来看看使用sys.stdin.write()的实现效果

sys.stdout.write("hello world")

执行效果如下:

Python常用標準函式庫及第三方函式庫2-sys模組

所以综上所述,input()+print() 结合的代码语句即可使用sys.stdin.readline()+sys.stdin.write()代替,如下:

sys.stdout.write("please input a number: n")
number = sys.stdin.readline()
sys.stdout.write("your input number is %s" % number)

执行效果如下:

Python常用標準函式庫及第三方函式庫2-sys模組

6.sys模組其他用法

  • sys.version:取得Python解釋器版本
  • sys.exc_info():傳回例外訊息三元組
  • sys.getdefaultencoding():取得系統目前編碼,預設為utf-8
  • sys.setdefaultencoding():設定係統的預設編碼
  • sys.getfilesystemencoding():取得檔案系統使用編碼方式,預設是utf-8
  • sys.modules:以字典的形式傳回所有目前Python環境中已經匯入的模組
  • sys.copyright:目前Python的版權資訊
  • sys.getrefcount(object):傳回物件的參考數量
  • sys.getrecursionlimit():傳回Python最大遞迴深度,預設1000
  • #sys.getsizeof(object[, default ]):傳回物件的大小
  • sys.getwindowsversion():傳回目前windwos系統的版本資訊

小結

sys模組是Python自帶的模組,主要用於與Python解釋器互動。它自帶了許多方法或屬性,其中:

1.sys.argv作用是實作從程式外部向程式傳遞參數,它能夠取得命令列參數清單。 argv列表包含了所有傳遞給腳本的參數:

  • sys.argv[0]:表示程式本身
  • sys.argv[1]:表示程式的第一個參數
  • sys.argv[2]:表示程式的第二個參數

2.sys.exit(n)作用是退出程式:

  • #當n為0時:正常退出
  • 當n不等於0時,非正常退出,會引發SystemExit的異常

sys.exit(n)經常與捕獲SystemExit異常一起使用,用來控製程式是否自由地中途退出;

3.sys.platform作用是取得目前Python運行平台,類似於platform.system(),常用來針對性地對不同作業系統作出不同的操作邏輯;

4.sys.path是Python的搜尋模組的路徑集,透過sys.path.append()方法將目前專案的根目錄加入系統環境變數中,可用來解決找不到模組的報錯情況;

5.在Python中, input() 等價於sys.stdin.readline(),print() 等價於sys.stdout.readline()。

以上是Python常用標準函式庫及第三方函式庫2-sys模組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除