是否有库或python魔法允许我在文件中执行所有函数而不显式调用它们。与pytest正在做的非常类似的事情 - 运行以' test _...'开头的所有函数。没有在任何地方注册它们。
例如假设我有一个文件a.py:
def f1():
print "f1"
def f2():
print "f2"
并假设我有文件 - 我的主文件 - main.py:
if __name__ == '__main__':
some_magic()
所以当我打电话时:
python main.py
输出结果为:
f1
f2
答案 0 :(得分:11)
这是一种方式:
def some_magic():
import a
for i in dir(a):
item = getattr(a,i)
if callable(item):
item()
if __name__ == '__main__':
some_magic()
dir(a)
检索模块a
的所有属性。如果属性是可调用对象,则调用它。这将调用所有可调用的内容,因此您可能希望使用and i.startswith('f')
对其进行限定。
答案 1 :(得分:0)
这是另一种方式:
#!/usr/local/bin/python3
import inspect
import sys
def f1():
print("f1")
def f2():
print("f2")
def some_magic(mod):
all_functions = inspect.getmembers(mod, inspect.isfunction)
for key, value in all_functions:
if str(inspect.signature(value)) == "()":
value()
if __name__ == '__main__':
some_magic(sys.modules[__name__])
它只会通过使用inspect.signature(function)来调用没有任何参数的函数。
答案 2 :(得分:0)
你试过callifile吗?
pip install callifile
然后,在您的文件中:
from callifile.callifile import callifile as callifile
import sys
callifile(module=sys.modules[__name__], verbose=True)
在文件 some_callify.py :
中from callifile.callifile import callifile as callifile
import sys
def f_1():
print "bla"
callifile(module=sys.modules[__name__], verbose=True)
呼叫终端:
python some_callify.py
给我终端输出:
Apply call_all_function_in_this_file on <module '__main__' from 'some_callify.py'>
See if should call callifile
See if should call f_1
Call f_1
bla