0

変数をコードに渡すことができるようにして、Pythonコードを動的に実行できるようにしようとしています。プロジェクトをGoogle App Engine環境に追加する前は、自分のコンピューターでこれを行うことができました(すべてのファイルにアクセスできるためですが、現在、Google App Engineではそれができません.

この問題の解決策を見つけるのに苦労しています。変数を送信して html を取得するだけでなく、スクリプトをクライアント側 (重要な部分) を使用するデータベース メソッドに追加することもできます。

編集: 基本的に動的とは、ライブラリの名前が格納されている python スクリプトをインポートできるようにすることです (または、プロトタイプをテストしたときに IDLE で行ったことです。解決策はおそらくインポートとは呼ばれません)。変数、および追加される未知数の変数。私はこれを Idle で動作させましたが、今度は Google App Engine 環境で動作させる必要があり、スクリプトもアップロードできるようにする必要があります (これは、さらに多くの問題に連鎖する主な問題です)。

編集: これをローカル マシンで動作させることができたということは、スクリプトをメイン スクリプトと同じディレクトリに手動でドロップできたことを意味します。スクリプトは、後で必要に応じてスクリプトをインポートして実行します。これを次のコードで機能させることができました。

#calling function
mod = __import__('actions.'+folder+'.'+FILE)
VAR = getattr(getattr(mod, folder), FILE)
response = VAR.Main()
print response

このコードは私のラップトップと Google App Engine 環境の両方で機能しましたが、ディレクトリにさらにスクリプトを追加しようとすると、問題が発生します私のラップトップでは、ファイル ディレクトリに完全にアクセスできたので、ファイルを何らかの方法で移動することができました。Google App エンジンでは、残りの Python スクリプトと同じディレクトリまたはサブディレクトリにファイルをアップロードすることはできません。したがって、基本的に、より多くのコードがシステムに入るのを許可する方法を設計しようとすると、問題が発生します (私の場合は、「プラグイン」を追加します)。

4

2 に答える 2

2

答えは、execステートメント(exec()関数とも呼ばれます)またはeval()関数です。http://docs.python.org/reference/simple_stmts.html#the-exec-statementおよびhttp://docs.python.org/library/functions.html?highlight=eval#evalを参照してください。これらは、文字列から任意のPythonコードを実行できます。exec()はスクリプトを実行し、副作用が発生します。eval()は式を受け取り、その値を返します。通常、入力はローカル名前空間の変数として渡します。

于 2012-10-01T01:22:42.113 に答える
1

さて、私が最終的に行ったことは、プラグインの名前、説明、アップローダー、コードなどすべてをアップロードするためにデータストアを使用することでした(今のところ、コードはテキストエリアボックスに入力されています)。次に、以前にデスクトップからすべてを実行したときのように、コードの同じディレクトリの下にあるフォルダーにあるファイルをインポートする代わりに、このちょっとした魔法を使用してプレーンテキストコードをモジュールにインポートしました。

#Initiating Variables for use by importing functions
module_name = 'mymod'
filename = 'action_file'
source = PossibleMatches[0][1] #the source code from the best matched option

# define module_name somewhere
import types
module = types.ModuleType(module_name)

# source should the code to execute
# filename should be a pseudo-filename that the code's from
# (it doesn't actually have to exist; it's used for error messages)
code_object = compile(source, filename, 'exec')

#execute the code in the context of the module
exec code_object in module.__dict__

#Executing the 'Main' Function from the code
return module.Main()
于 2012-10-01T20:04:12.873 に答える