インターネットからスクリプトをインポートして実行するプログラムに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
と、今のところ問題が解決したようです。ただし、後で他の問題が発生するかどうかはわかりません。