4

セットアップPythonファイルを読み取って解析するPythonスクリプトを作成する必要があります。セットアップには、いくつかの変数と関数呼び出しが含まれています。

例:

setup.py
x = 5
mylist [ 1, 2, 3]
myfunc(4)
myfunc(5)
myfunc(30)


main.py
.
parse_setup('setup.py')
.

セットアップファイルを解析して、定義されている変数の種類と関数呼び出しの種類を「確認」したいと思います。セットアップファイルはPythonで書かれているので、セットアップファイルを動的にインポートするのが最も簡単だと思っていました(セットアップファイルのパスがmainの入力であるため、動的に)。

myfucn()問題は、で呼び出されたsetup.pyが定義されていないため、インポートが失敗することです。

myfunc()の呼び出しをインターセプトして、setup.pyで定義された独自の関数を実行する方法はありmain.pyますか?

実行したい関数がメンバー関数の場合はどうなりますか?

セットアップファイル内のデータを抽出するためのより良い方法を誰かが考えることができますか?私は本当にそれを行ごとに読みたくありません。

ありがとう!

4

2 に答える 2

1

setup.pyファイルに次のPythonステートメントが含まれている場合:

x = 5
mylist = [ 1, 2, 3]
y = myfunc(4)
z = myfunc(x)

あなたはそれがmain.py何を定義したかを知るためにこのようなことをすることができます:

def myfunc(n):
    return n**2

def parse_setup(filename):
    globalsdict = {'__builtins__': None, 'myfunc': myfunc}  # put predefined things here
    localsdict = {}  # will be populated by executed script
    execfile(filename, globalsdict, localsdict)
    return localsdict

results = parse_setup('setup.py')
print results  # {'y': 16, 'x': 5, 'z': 25, 'mylist': [1, 2, 3]}
于 2012-11-04T15:51:06.707 に答える
0

setup.pyファイルが有効なpythonである場合は、execfile()またはimport()を使用できます。

execfileはあなたが探しているように見えるものに近いです。

setup.py

def function(): print "called"

main.py

execfile("setup.py")
function() # will print called

http://docs.python.org/2/library/functions.html#execfile

もう一度あなたの質問を読んだ後、より良い例は次のようになります:

setup.py

func("one")
func("two")

main.py

def func(s): print s
execfile("setup.py") 
# will print:
# one
# two

関数を定義した後、ファイルのロードを実行する必要があることに注意してください。

于 2012-11-04T15:34:53.790 に答える