python執行環境

來源:互聯網
上載者:User

標籤:python

在python中有很多種運行外部程式的方法,有些特定的情境包括:在當前指令碼繼續運行、建立和管理子進程、執行外部命令或程式、執行需要輸入的命令、通過網路來調用命令、執行命令來建立需要處理的輸出、執行其它的python指令碼、執行一系列動態產生的python指令碼、匯入python模組和執行它頂層的代碼,這些情境都與python執行環境有關,下面先從可調用對象說起。

1、可調用對象

python有四種可調用對象:函數、方法、類,以及一些類的執行個體。這些對象的任何引用或者別名都是可調用的,還可以通過函數式編程介面來進行調用,函數式編程介面如apply()、filter()、map()以及reduce()。
python有3種不同類型的函數對象,分別是內建函數、使用者自訂函數、lambda運算式。方法與類相關聯,包括內建方法和自訂方法。類是我們經常遇到的一個概念,利用類的可調用性可以建立執行個體。類的執行個體預設是不可以調用的,只有定義類的時候實現了call()方法,類的執行個體才是可調用的。

2、代碼對象

可執行對象,如語句、賦值、運算式,甚至模組,是構成代碼塊的一部分,被稱為代碼對象,如果要執行這些代碼,必須首先要轉換成位元組編譯的代碼,因為這才是真正的可執行對象。一般說來,代碼對象可以作為函數或者方法調用的一部分來執行,也可用exec語句或內建函數eval()來執行。如自訂函數的func_code屬性,便是一個代碼對象。

3、內建函數

python提供了大量的內建函數支援可執行對象,包括:
callable(obj):判斷obj是否可調用。
compile(string,file,type):從type類型中建立代碼對象,file是代碼存放的地方,通常設為“”Null 字元串,type可以是eval、single或者exec,分別表示可求值運算式、單一可執行語句、可執行語句組,對於傳回值,第一個與eval()配合使用,後面兩個與exec一起使用。
eval(obj,globals=globals(),locals=locals()):對obj進行求值,obj是已編譯為代碼對象的運算式,或是一個字串運算式,可以給出全域、局部的名字空間。
exec obj:執行obj,單一的python語句或者語句的集合,也就是說格式是代碼對象或者字串,obj也可以是一個檔案對象。
input(prompt=”):等同於eval(raw_input(prompt=”))

4、執行其它python程式

在運行時刻,有很多執行另外python指令碼的方法。第一次匯入模組會執行模組最進階別的代碼,即沒有縮排的代碼。匯入模組的副作用是導致最進階別的代碼運行,而execfile()也可以讀取python指令碼的內容,但是僅可以在現有的執行環境下運行。再一個就是在命令列運行python指令碼,有兩個好用的命令列參數,“-c”參數可以讓python的匯入機制自動尋找模組並匯入,“-m”參數等效與“name”的值為“main”。

5、執行非python程式

在python程式裡,我們也可以執行非python程式,這些程式包括了二進位可執行檔,其它的shell指令碼等等,所有的要求只是一個有效執行環境。不同的作業系統,python模組不同,但只需要匯入os模組就可以了,python會根據特定的作業系統裝載正確的模組。
os.system(cmd):執行程式cmd,cmd是個字串,等待程式結束,返回退出碼,windows下始終為0。
os.popen(cmd,mode=’r’,buffering=-1):執行字串cmd,返回一個類檔案對象作為運行程式通訊控制代碼,預設為讀模數式和預設系統緩衝。
os.fork():建立一個和父進程並行的子進程,通常來說和exec*()一起使用,返回兩次,一次給父進程,一次給子進程。
os.exec*():exec*()家族,用參數列表、參數向量列表、環境變數來執行檔案、命令。
os.spawn*():spawn*()家族,在新進程中執行命令。
os.wait*():wait()等待子進程完成,waitpid()等待指定的子進程完成。
除了os模組,subprocess也可以作類似的工作,它是一個面向進程的模組。相關的模組還有atexit、popen2、commands、getopt、site、platform等。

6、程式結束執行

當程式運行完成,所有模組最進階的語句執行完畢後退出,這是乾淨的執行,可能有很多情況,需要從python提前退出,比如某種致命錯誤,或是不滿足繼續執行的條件的時候,在python中,有各種應對錯誤的方法。
sys.exit(status=0):立即退出程式並返回調用程式,當調用這個函數時,就會觸發SystemExit異常,這個異常是唯一不看作錯誤的異常。
sys.exitfunc():預設是停用,但可以改寫它以提供額外的功能,當調用了syt.exit()並在解譯器退出之前,就會用到這個函數了。
os._exit(status):這個函數提供的功能與上面的兩個函數相反,根本不執行任何清理便立即退出python。
os.kill(pid,sig):發送sig訊號給pid進程。

python執行環境

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.