Python中的设置向导脚本

4 投票
1 回答
2405 浏览
提问于 2025-04-17 20:09

我正在用Python写一个简单的安装向导脚本。这个脚本的主要功能是提示用户输入一些值,并回答一些是/否的问题。根据用户的输入,脚本会创建文件夹、生成和初始化配置文件、创建符号链接、设置权限等等。

随着用户做出选择,脚本会走不同的路径,文件夹的结构和符号链接的存在情况可能会有所不同。在每一步都可能出现很多问题,可能需要用户更改输入或者撤销整个操作。

1 - 这种写脚本的方法好吗?这个文本菜单的安装向导真的是个好主意吗?

2 - 有没有什么模块可以帮助我简化这个过程,让我不用重复造轮子?

3 - 我是应该在用户做出选择时就执行每一步,还是等到最后一次性完成所有操作?

4 - 有什么好的方法来记住已经创建的结构,以便我可以写一个撤销功能?

我不想要代码作为答案;任何建议、意见或外部链接都很受欢迎。

1 个回答

3

我不太做图形界面的东西。你可以写一个,但我们假设你完全是在命令行上操作。

  1. 我建议在用户输入所有信息之前,不要进行任何实际的操作。换句话说,用户还没完成所有选项之前,不要开始创建文件夹。Python的文档工具Sphinx就是个好例子。当用户启动quickstart时,它会问用户很多问题。Sphinx直到最后才生成实际的文件夹和配置文件。这样就不需要“记住”之前的选择,避免了太多的分支情况。不要这样做,所有的设置最好在最后一起完成。

  2. 这要看情况。如果你想做一个简单的命令行界面,Python有一个叫argparse的工具可以用来处理命令行选项。上面提到的功能是通过docopt库实现的,它是建立在argparse之上的。但这主要适用于需要命令行的情况。如果你的脚本只需要输入“python script.py”然后开始问用户问题,我就不知道有什么有用的库可以处理这些设置了。

其实我正在开发一个叫dcoprompt的工具,但还没完成。https://bitbucket.org/yeukhon/docprompt 本来是想让你写下你的设置提示,然后记住它们。代码质量很差,也不太高效。你可以试试,但由于这个学期作业很多,我可能要到夏天才能完成这个功能。

所以答案是没有。你得自己写代码。就是很多原始输入和很多变量。

  1. 再说一次,等到最后再进行实际操作。

  2. 再说一次,等到最后再进行实际操作。


编辑

假设你等到最后才创建文件夹和符号链接,但在某一步发生了IOError,你想要撤销整个设置。如果你创建的只是文件夹、文件和符号链接,可以把它们添加到一个字典的列表中。请看我的编辑。

def physical_setup(...):
    memory = {
        'dirs': [],
        'symlinks': [],
        'files': []
    }
    try:
        # start doing physical setup
        memory['dirs'].append('/tmp/dir1')        
        os.path.mkdir('/tmp/dir1')

    # catching all exceptions is considered a bad practice but sometimes be a little badass
    except Exception as e:
        for key, valist in memory.iteritems():
            if key == 'dirs':
                for dir in valist:
                    shutil.rmtree(dir)

重要: 上面的代码有一个问题,你应该在删除文件夹之前先解除链接,删除文件和文件夹。因为如果文件是已经删除的文件夹的一部分,你就得静默捕获异常。代码会很多。只需解除链接,删除文件和文件夹。

撰写回答