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")

     

 

posted @ 2019-07-23 16:10  帝渊凯  阅读(1469)  评论(0编辑  收藏  举报