2

私はPythonで書かれたアプリを持っています。ユーザーが独自のスクリプトを実行できるようにすることで、アプリ オブジェクトを操作できるようにしたいと考えています。彼らはスクリプトでエラーを起こす可能性があります。エラーが発生した場合、アプリの実行が停止しないようにしたいと考えています。アプリにデバッガーを埋め込んで、スクリプトのデバッグを支援したいと考えています。

たとえば、アプリの shape.py でポイント クラスを定義します。

class QVPoint(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def addPoint(self, aPoint):
        self.x = self.x + aPoint.x
        self.y = self.y + aPoint.y

次のようなスクリプトを実行できるようにしたい:

from shapes import QVPoint
a = QVPoint(1,1)
a.addPoint(QVPoint(2,2))
print "<" + str(a.x) + ',' + str(a.y) + ">"
print "<%d,%d>" % (a.x, a.y)
print 'done'

これはインタープリター、デバッガーを使用する必要があると思いますが、1) アプリで作成されたオブジェクトをスクリプトに公開する方法と、2) 次の場合にアプリが停止しないようにする方法についてはわかりません。バグによりスクリプトが停止します。

これは以前に尋ねられたに違いないと確信していますが、見つかりません。すべての回答を歓迎します。

多くのthx

デビッド

4

2 に答える 2

3

ユーザーのスクリプトを評価するには、別のインタープリター インスタンス (別の Python プロセス) を使用することをお勧めします。これにより、ユーザー スクリプトが壊れてもアプリケーションに影響を与えないことが保証されます。os モジュールを使用して外部プロセスを実行できます。これはその 1 つの方法です: http://docs.python.org/library/os.html#os.popen

ユーザーのスクリプトがアプリケーションから特定のモジュールをインポートできるようにして、定義した変数にスクリプトがアクセスできるようにすることができます。

于 2010-06-11T18:03:48.700 に答える
1

いくつかの決定を行う必要があります。

  1. アプリの同じプロセスで実行しますか、それとも別のプロセスで実行しますか?

    アプリの詳細をあまり知らなくても、別のプロセスで実行することを好む傾向があります。subprocessこれにはモジュールを使用します。ユーザー スクリプトを呼び出すアプリ ランチャーを作成できます。例外がスローされた場合は、それをキャッチして結果をフォーマットし、ユーザーに報告できます。

  2. クラスをユーザーに公開しますか、それともオブジェクトをユーザーに公開しますか?

    あなたの例では、クラスを共有するだけで十分です。これはかなり単純なはずです。

    クラスのみの場合は、単純に PYTHONPATH に含めることができます。その後、ユーザーはそれらをインポートできます。オブジェクトを公開したい場合は、プロセス内でこれを行う必要がある場合があります。または、オブジェクトをシリアル化して新しいプロセスに転送する方法を見つける必要があります。

于 2010-06-11T18:23:26.993 に答える