在运行时添加python脚本

时间:2010-10-27 21:35:59

标签: python dynamic runtime

我正在开始python并且正在开发一个项目,我希望能够做的一件事就是在运行时动态下载并运行脚本。

一般的想法是能够连接到服务器,按需下载python脚本,并运行刚下载的脚本,而无需重新启动程序或将特定脚本硬编码到程序中。

我正在使用的程序使用Python进行脚本和执行,使用C ++进行渲染和数学等其他代码。

我希望能够使用python来运行从服务器下载的脚本(用于诸如用户生成内容之类的内容)。

我想知道这是否可能,或者我是否应该使用另一种脚本语言(可能是LUA)?

谢谢, Th3flyboy

3 个答案:

答案 0 :(得分:1)

你绝对可以做到这一点。使用urllib下载或生成脚本,然后导入它。只要你将脚本下载到PYTHONPATH,它就会像魅力一样。

例如:

from urllib import urlretrieve
urlretrieve('http://www.mysite.com/myscript.py', '/home/me/script.py')
import script

您也可以自己从模板生成脚本,从在线(可能是xml或数据库)中提取数据,并使用Python的文本处理功能进行必要的调整。

答案 1 :(得分:1)

这很可能,虽然非常不安全。

您需要使用urllib2.urlopen下载,然后使用exec执行结果。由于安全隐患,我不愿进一步解释。

修改:有关安全问题的说明。

在Python(CPython)中,目前无法拥有sandbox。结果是任何不受信任的代码都可以访问Python在您的机器上具有的所有功能(针对特定用户)。这可以通过使用专业用户和更好的操作系统级解决方案来部分解决。然而,它们很复杂。

沙盒的一个例子是Java限制applet完全访问该机器的方式。

Lua经常用于游戏编程。着名的例子是World of Warcraft。其中一个主要原因是它可能是sandboxed。确定允许不受信任的代码的功能并不简单,但至少它可以比Python更容易保护。

答案 2 :(得分:0)

任何允许运行外部脚本的编程语言都应该能够胜任。这实际上意味着所有语言。几乎所有动态语言都可以。

使用python,有多种方法可以连接到服务器并获取URL。执行时,您可以使用子进程模块