我正在使用python 2.4来从互联网上导入脚本并执行它们,以便作者可以更改脚本,用户不必重新下载脚本。
这是下载脚本的程序的一部分:
def downloadScript(self,script):
myfile=open('#A file path/'+script['name']+'.txt','w')
try:
downloadedScript=urllib.urlopen(script['location']).read()
except:
#raise error
return
myfile.write(downloadedScript)
myfile.close()
def loadScript(self):
if not self.scriptCurrentlyLoaded:
script=self.scripts[self.scroller.listPos]
if script['location']=='None':
#raise error
return
self.downloadScript(script)
myfile=open('#A file path/'+script['name']+'.txt','r')
for line in myfile:
if line.startswith('from') or line.startswith('import'):
exec(line.strip()) #This was added because of the name errors
#being produced but to no affect
myfile.close()
execfile('#A file path/'+script['name']+'.txt')
self.scriptCurrentlyLoaded=True
self.scriptLoaded=script
else:
#raise error
非常奇怪的是,当我跑
时execfile(script path)
在函数外部,下载脚本后,脚本正确执行。但是,尝试运行loadScript函数会在脚本中引发名称错误,即使这些名称已经在脚本中导入,而且在execfile之前我发现它很奇怪。
所以我的问题是:我使用非常糟糕的方法下载并执行这些脚本吗?
很抱歉,如果之前已经回答了这个问题,但我似乎找不到其他人试图通过从互联网上下载来运行python脚本。
修改:将globals
添加为execfile
的另一个参数似乎现在解决了问题。我不知道以后是否会出现任何其他问题。
答案 0 :(得分:1)
在R中你可以简单地'来源(网址)'。这是我到目前为止在python中找到的最接近的:
import urllib
(fn,hd) = urllib.urlretrieve('http://host.com/file.py')
execfile(fn)