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