腳本運行過程中可能由某個py文件調用另一個py文件,不同於import,調用py文件相當於直接去執行另一個py文件
py文件的調用需要使用sys庫和os庫
- 調用並傳參數:調用py文件可以使用os.system(file)語句,file為被調用py文件的絕對路徑,os.system語句規則如下:
os.system格式為os.system(command % (%s,%i ...))
command 為字符串格式的命令語句,如果需要傳遞參數,以%s或%i等取代
具體參數如下:
%s 字符串 (采用str()的顯示)
%r 字符串 (采用repr()的顯示)
%c 單個字符
%b 二進制整數
%d 十進制整數
%i 十進制整數
%o 八進制整數
%x 十六進制整數
%e 指數 (基底寫為e)
%E 指數 (基底寫為E)
%f 浮點數
%F 浮點數,與上相同
%g 指數(e)或浮點數 (根據顯示長度)
%G 指數(E)或浮點數 (根據顯示長度)
%后面的括號中依次輸入對應參數內容
- os.system舉例:
def run_parser(): rootdir = os.path.join(os.getcwd(),"scripts/enum_parser.py") rootdir += " %s %s" os.system(rootdir %("input_table_define","output_lua_server"))
- 被調用端讀取參數:通過sys.argv[]接受參數
此處sys.argv[0]表示代碼本身文件路徑,不是傳遞的參數,參數從[1]開始
傳遞過程中不能傳“”空字符串,空字符串不會被傳遞,需要傳“”空字符串時應假定一個特殊字符串傳遞,在接收端檢測到目標字符串時將變量置空
- 被調用端讀取參數舉例:
#參數初始化 canshu1 = "" canshu2 = "" output = "" if(len(sys.argv) >3): output = sys.argv[3] if output == "NoVal": output == "" if(len(sys.argv) >2): canshu2 = sys.argv[2] if canshu2 == "NoVal": canshu2 == "" if(len(sys.argv) >1): canshu1 = sys.argv[1] if canshu1 == "NoVal": canshu1 == ""
首先默認置空,之后判斷是否傳入了足夠的參數防止報錯,最后讀取參數
- 文件調用實用測試方法:
os.system語句的返回值可用來判斷該語句是否被正確執行,在腳本間相互調用時為每個腳本寫print語句很麻煩,利用返回值是否為0可判斷是否正確執行
- 測試方法舉例:
re = os.system(rootdir %(p1,p2,p3)) if not re == 0: print("fail call") os.system("pause")