我开始使用python并在一个项目中工作,我希望能够做的一件事就是在运行时动态下载并运行脚本。
一般的想法是能够连接到服务器,按需下载python脚本,并运行刚刚下载的脚本,而不必重新启动程序或将特定脚本硬编码到程序中。
我正在使用的程序使用Python编写脚本和执行,使用C++编写渲染和数学等其他代码。
我希望能够使用python来运行从服务器下载的脚本(例如用户生成的内容)。
我想知道这是否可能,或者我是否应该在这种情况下使用另一种脚本语言(可能是LUA)?
谢谢,Th3flyboy
发布于 2010-10-28 05:38:38
你绝对可以做到。使用urllib下载或生成脚本,然后将其导入。只要你把脚本下载到你的PYTHONPATH上,它每次都会工作得很棒。
例如:
from urllib import urlretrieve
urlretrieve('http://www.mysite.com/myscript.py', '/home/me/script.py')
import script您还可以自己从模板生成脚本,从联机(可能是以xml格式或从数据库)提取数据并使用Python的文本处理功能进行必要的调整。
发布于 2010-10-28 05:43:20
这是很有可能的,尽管非常不安全。
您需要使用urllib2.urlopen下载,然后使用exec执行结果。由于安全方面的影响,我不愿进一步解释。
编辑:有关安全问题的说明。
在Python (CPython)中,目前没有办法拥有sandbox。结果是,任何不受信任的代码都可以访问Python在您的机器上(针对特定用户)拥有的所有功能。这可以通过使用专业用户和更好的操作系统级解决方案来部分解决。然而,它们是复杂的。
沙箱的一个例子是Java限制applet完全访问机器的方式。
Lua在游戏编程中经常被使用。著名的例子是World of Warcraft。其中一个主要原因是它可以是sandboxed。决定允许不受信任的代码的功能并不简单,但至少可以比Python更容易地保护它。
发布于 2010-10-28 05:41:39
任何允许运行外部脚本的编程语言都应该能够完成您的工作。这实际上意味着所有的语言。几乎所有的动态语言都可以。
使用python,有许多方法可以连接到服务器并获取url。对于执行,您可以使用子进程模块
https://stackoverflow.com/questions/4037913
复制相似问题