Python腳本隨筆-py文件間的調用


腳本運行過程中可能由某個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")

     

 


免責聲明!

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



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