首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖结构的CLI工具

覆盖结构的CLI工具
EN

Software Engineering用户
提问于 2018-12-11 12:29:54
回答 2查看 103关注 0票数 1

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

步骤1:用户下载一个xlsx,将其放入一个文件中,运行tool --preprocess,它接受一些输入A、B、C和文件名。这一步没有任何作用,见下面的问题。

步骤2:用户运行tool --start,提供相同的输入。然而,这一次它使用它们的输入和xlsx来生成yaml。

第三步:用户完成对yaml的更新,并运行只需一个yaml和xlsx的tool --build,并将其转换为一个巨大的pdf。

我注意到的一件事是,我的一些用户会不遗余力地编辑一些文件,因为它们是一个边缘情况。例如:他们可能在使用tool --start之前创建一些工作表。

下面是我的问题:如何允许用户“钩子”到每个步骤,也就是说,允许他们编写一个自定义python文件/函数,该文件/函数保存在不同的文件中(我不想要定制使每个人都具有功能):

因此,与其:

代码语言:javascript
复制
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(),然后工具会根据输入导入文件并运行它们的函数?

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2018-12-18 23:05:31

您可以动态导入用户创建的文件并运行适当的函数;可能在每个函数中都有一个run()函数。

让这些文件在运行tool时作为输入参数提供。

代码语言:javascript
复制
tool --userFiles A,B

下面是这样一个用户文件的示例:

A.py

代码语言:javascript
复制
def run():
    # Do something
    return

然后,您的tool将解析其参数,并使用用户文件名列表调用(比方说) preprocess

代码语言:javascript
复制
userFiles = ['A', 'B'] # determined by your arg parser
preprocess(userFiles)

您的函数将导入这些用户文件并执行它们。

代码语言:javascript
复制
def preprocess(*args):
    for a in args:
        userFile = __import__(a)
        userFile.run()
票数 3
EN

Software Engineering用户

发布于 2019-01-18 05:01:56

如果用户给出一个文件名,您可以这样做来运行任意代码:

代码语言:javascript
复制
exec(open(filename).read())
代码语言:javascript
复制
def preprocess(fileName=None):
    # do stuff
    if fileName != None:
       exec(open(fileName).read())
票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/382841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档