我需要编写一个python脚本来读取和解析setup 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
中定义的我自己的功能吗?
如果我想要执行的函数是成员函数怎么办?
任何人都可以想到一个更好的方法来提取设置文件中的数据,我真的不想逐行阅读。
谢谢!
答案 0 :(得分: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]}
答案 1 :(得分: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
请注意,必须在定义函数后完成文件加载。