一个 flask 的应用,需要支持用户自定义的 script 脚本,脚本也是 py 的。
自定义的 py 脚本经常会改,但是 flask 不能经常重启,当前使用的方式为:
trigger = importlib.import_module(TS_NAME)
importlib.reload(trigger)
sc_res = trigger.check(*TS_ARGS, **self.kwargs)
外部的 script 中,默认有个 check 的 方法,只需要执行这个方法。
现在遇到的问题包括:
1:需要 sys.path.append(LIB_PATH),LIB_PATH 为自定义脚本所在目录,要不然找不到;
2:使用 import_module 来 import,是根据文件名来 import, 为了防止修改,每次都 reload ;
3:lib 的顺序问题,因为是根据 name 来 import,如果 2 个自定义脚本的路径不一样,但是 name 一样,就会导致顺序问具体,永远执行的是在 lib 中最靠前的那个,会引起不可预料的问题;
4:一旦有个用户在里面写 exit(),那 flask 的主程序也就挂了。
目前虽然可以规避,但并不是一个安全可控的解决方案,设计这个主要的目的是为了实现,可以让用户自定义 script,进行整个系统的定制和二次开发。
不知道有没有其他好的解决方案,可以在保证灵活性的基础上,又能够实现安全可控。
自定义的 py 脚本经常会改,但是 flask 不能经常重启,当前使用的方式为:
trigger = importlib.import_module(TS_NAME)
importlib.reload(trigger)
sc_res = trigger.check(*TS_ARGS, **self.kwargs)
外部的 script 中,默认有个 check 的 方法,只需要执行这个方法。
现在遇到的问题包括:
1:需要 sys.path.append(LIB_PATH),LIB_PATH 为自定义脚本所在目录,要不然找不到;
2:使用 import_module 来 import,是根据文件名来 import, 为了防止修改,每次都 reload ;
3:lib 的顺序问题,因为是根据 name 来 import,如果 2 个自定义脚本的路径不一样,但是 name 一样,就会导致顺序问具体,永远执行的是在 lib 中最靠前的那个,会引起不可预料的问题;
4:一旦有个用户在里面写 exit(),那 flask 的主程序也就挂了。
目前虽然可以规避,但并不是一个安全可控的解决方案,设计这个主要的目的是为了实现,可以让用户自定义 script,进行整个系统的定制和二次开发。
不知道有没有其他好的解决方案,可以在保证灵活性的基础上,又能够实现安全可控。