我有一个python工具,我的部门使用它来处理由yaml辅助的一些excel文件。我试图在这里画出一个基本的工作流程:

步骤1:用户下载一个xlsx,将其放入一个文件中,运行tool --preprocess,它接受一些输入A、B、C和文件名。这一步没有任何作用,见下面的问题。
步骤2:用户运行tool --start,提供相同的输入。然而,这一次它使用它们的输入和xlsx来生成yaml。
第三步:用户完成对yaml的更新,并运行只需一个yaml和xlsx的tool --build,并将其转换为一个巨大的pdf。
我注意到的一件事是,我的一些用户会不遗余力地编辑一些文件,因为它们是一个边缘情况。例如:他们可能在使用tool --start之前创建一些工作表。
下面是我的问题:如何允许用户“钩子”到每个步骤,也就是说,允许他们编写一个自定义python文件/函数,该文件/函数保存在不同的文件中(我不想要定制使每个人都具有功能):
因此,与其:
def preprocess():
# do stuff
if input == "A":
# user 1 code
if input == "B":
# user 2 code
# convert to expected form也许他们可以推出一个像"A.py“这样的文件,这个文件有def overload_preprocess(),然后工具会根据输入导入文件并运行它们的函数?
发布于 2018-12-18 23:05:31
您可以动态导入用户创建的文件并运行适当的函数;可能在每个函数中都有一个run()函数。
让这些文件在运行tool时作为输入参数提供。
tool --userFiles A,B下面是这样一个用户文件的示例:
A.py
def run():
# Do something
return然后,您的tool将解析其参数,并使用用户文件名列表调用(比方说) preprocess。
userFiles = ['A', 'B'] # determined by your arg parser
preprocess(userFiles)您的函数将导入这些用户文件并执行它们。
def preprocess(*args):
for a in args:
userFile = __import__(a)
userFile.run()发布于 2019-01-18 05:01:56
如果用户给出一个文件名,您可以这样做来运行任意代码:
exec(open(filename).read())def preprocess(fileName=None):
# do stuff
if fileName != None:
exec(open(fileName).read())https://softwareengineering.stackexchange.com/questions/382841
复制相似问题