Jimmy小站

小明也有大梦想 — 蒋明/铭
当前位置:网站首页 / 未分类 / 正文

python脚本执行

2024-10-10 / 未分类 / 341 次围观 / 2 次吐槽

限制IO访问

@contextlib.contextmanager
def restricted_io():
    original_open = builtins.open

    def restricted_open(*args, **kwargs):
        raise PermissionError("File IO operations are forbidden.")

    builtins.open = restricted_open
    try:
        yield
    finally:
        builtins.open = original_open
class ScriptEngineHandler:
    def with_restricted_context(func):
        from pp_utils import restricted_io
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            with restricted_io():
                return func(*args, **kwargs)

        return wrapper

    @with_restricted_context
    def handle(self, req: fc3context.EngineRequest):
        raise NotImplementedError

这个是

class ExecHandler(ScriptEngineHandler):
    @ScriptEngineHandler.with_restricted_context
    def handle(self, req: fc3context.EngineRequest):
        code = req.raw_code
        if not code:
            return None
        loader = importlib.machinery.SourceFileLoader("user_module", "/path/to/user_module.py")
        loader.get_code = lambda _: compile(code, loader.name, 'exec')
        spec = importlib.util.spec_from_loader(loader.name, loader)
        module = importlib.util.module_from_spec(spec)
        spec.loader.exec_module(module)
        params_count = check_function(module, 'main')
        setattr(module, '_ctx_node_', fc3context.NodeResponse(getattr(req, '_ctx_node_', None)))
        algo_module = importlib.import_module('pp_algo')
        # 将参数写入模块的上下文,这样代码中就可以直接使用 「_ctx_node_」
        setattr(algo_module, '_ctx_node_', fc3context.NodeResponse(getattr(req, '_ctx_node_', None)))
        if params_count == 0:
            return module.main()
        else:
            return module.main(req.event)

这里是将参数写入request, 后续可将request中的变量写入上下文

class EngineRequest:
    def __init__(self, event: Optional[dict] = None):
        self.raw_code = None
        self.script_name = None
        self.script_engine: Optional[Literal['py310', 'eval', 'exec']] = None
        if not event:
            return
        for key, value in event.items():
            setattr(self, key, value)

推荐您阅读更多有关于“”的文章

[一个Java程序猿的转型之路,读研深造,专注机器学习推荐算法]
本站所有文章如无特别注明均为原创。作者:吉米酱 ,复制或转载请以超链接形式注明转自 Jimmy小站
原文地址《python脚本执行

已有2位网友发表了看法:

1#传奇手游  2024-11-18 00:27:47 回复该评论
龙腾传世如何变身贪玩蓝月?:https://501h.com/heji/282.html
2#传奇私服  2024-11-17 11:24:24 回复该评论
龙腾传世如何变身贪玩蓝月?:https://501h.com/heji/282.html

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Copyright © Jimmy小站 Allrights Reserved.备案号:桂ICP备 15005996