代码之家  ›  专栏  ›  技术社区  ›  friol

在Python应用程序中编写脚本

  •  5
  • friol  · 技术社区  · 16 年前


    在我的一个应用程序中,这是用Python本身编写的。

    我的应用程序必须能够根据需要调用外部Python函数(由用户编写) 回调 . 必须对代码执行进行某种控制;例如,如果用户提供的代码有语法错误,应用程序必须发出信号。


    谢谢

    当前位置问题不清楚。我需要一种类似于VBA事件的机制,其中有一个“声明”部分(定义全局变量)和在特定点触发的带有脚本代码的事件。

    4 回复  |  直到 14 年前
        1
  •  8
  •   ibz    16 年前

    使用 __import__ 导入用户提供的文件。此函数将返回一个模块。使用它从导入的文件调用函数。

    使用 try..except 都在 __进口__ 并在实际调用中捕获错误。

    例子:

    m = None
    try:
        m = __import__("external_module")
    except:
        # invalid module - show error
    if m:
        try:
            m.user_defined_func()
        except:
            # some error - display it
    
        2
  •  8
  •   James Brady    16 年前

    如果您希望用户以交互方式输入命令,我强烈推荐 code

    一定要赶上系统出口!

    $ python
    Python 2.5.1 (r251:54863, Jan 17 2008, 19:35:17) 
    [GCC 4.0.1 (Apple Inc. build 5465)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> shared_var = "Set in main console"
    >>> import code
    >>> ic = code.InteractiveConsole({ 'shared_var': shared_var })
    >>> try:
    ...     ic.interact("My custom console banner!")
    ... except SystemExit, e:
    ...     print "Got SystemExit!"
    ... 
    My custom console banner!
    >>> shared_var
    'Set in main console'
    >>> shared_var = "Set in sub-console"
    >>> sys.exit()
    Got SystemExit!
    >>> shared_var
    'Set in main console'
    
        3
  •  4
  •   gimel    16 年前

    RestrictedPython 为Python提供受限制的执行环境,例如用于运行不受信任的代码。

        4
  •  0
  •   S.Lott    16 年前

    “我的应用程序必须能够调用外部Python函数(由用户编写)作为回调”。

    然后,用户可以扩展类并提供适当的方法函数,而不是回调。

    这很少需要全局变量。它也更容易实现,因为您的用户执行以下操作

    import core_classes
    class MyExtension( core_classes.SomeClass ):
        def event_1( self, args ):
            # override the default behavior for event_1.
    
    core_classes.main( MyExtension )
    

    这工作非常顺利,并允许最大的灵活性。错误总是出现在他们的代码中,因为他们的代码是“主”模块。