1

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

4

1 に答える 1

3

R では、単純に「source(url)」を使用できます。Pythonでこれまでに見つけた最も近いものは次のとおりです。

import urllib
(fn,hd) = urllib.urlretrieve('http://host.com/file.py')
execfile(fn)
于 2015-09-03T11:26:17.490 に答える