4

我需要编写一个 python 脚本来读取和解析设置 python 文件。setup 包含一些变量和函数调用。

例子:

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 接近您似乎正在寻找的内容。

安装程序.py

def function(): print "called"

主文件

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

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

再次阅读您的问题后,一个更好的例子可能是:

安装程序.py

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

主文件

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

请注意,必须在定义函数后完成文件加载。

于 2012-11-04T15:34:53.790 回答