2013-03-24 75 views
3

我正在编写一个简单的设置向导像Python中的脚本。基本上它会提示用户输入一些数值并回答一些是/否的问题。基于用户输入,脚本将创建目录,创建和初始化配置文件,创建符号链接,设置权限等。像Python中的脚本安装向导

当用户做出选择时会采取不同的路径,目录结构和符号链接的存在可能会有所不同。在每个步骤中可能会出现许多问题,可能需要用户更改输入或回滚整个事件。

1 - 这是编写此脚本的最佳方法吗?这个文本菜单设置向导是一个好主意吗?

2-是否有一个模块,可以帮助使这个更简单,使我不重新发明轮子?

3-我应该在用户做出选择时真正执行每一步吗?或者等到结束并一次做所有事情?

4-什么是最好的方式来记住已经创建的结构,以便我可以编写一个回滚函数?

我不希望任何代码作为答案;任何建议,意见或外部链接表示赞赏。

回答

2

我不做GUI的东西。你可以写一个,但是我们假设你完全在命令行上完成。

  1. 我会建议在做出物理副作用之前接受所有用户输入。换句话说,在用户完成所有选项之前,不要开始创建目录。 Python文档工具Sphinx就是一个很好的例子。当用户启动quickstart时,它会向用户询问很多问题。狮身人面像直到最后才会生成物理目录和配置文件。这消除了“记住”是累人的需要。分支太多。不要这样做。在最后完成整个设置。

  2. 取决于。如果你想制作一个简单的命令行界面,Python有argpase来制作命令行选项。以上是使用建立在argparse之上的docopt库实现的。但是如果你想要命令行,这是很有用的。如果你的脚本只需要调用“python script.py”,然后开始询问用户的问题,我不知道任何有用的库来处理安装的东西。

其实我是在开发一个名为dcoprompt的中间,但还没有完成。 https://bitbucket.org/yeukhon/docprompt基本上它应该允许你写下你的设置提示,然后记住它们。代码库很糟糕,效率不高。你可以试试,但是我不会在夏天之前完成这个功能,因为这个学期的作业量很大。

所以答案是否定的。你必须自己编写代码。只是很多原始投入和很多变数。

  1. 再次等待,直到结束才产生副作用。

  2. 再一次,等到最后做出副作用。


编辑

说你等到年底创建目录和符号链接,并在步骤IO错误发生的一个,要撤消整个安装。如果您正在创建的是目录,文件和符号链接,请将它们添加到列表字典中。看我的编辑。

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) 

重要:上面的代码中有一个问题,您应该取消链接,delting的文件夹之前删除的文件,并显示目录。因为如果这些文件是已经删除的目录的一部分,你将不得不默默地捕捉到这个异常。很多代码。只需取消链接,删除文件和目录。

+0

+1这非常有帮助,有关回滚功能的任何建议? – jurgenreza 2013-03-24 18:01:31

+0

看我的编辑。取决于你要做什么。只是目录和文件和符号链接,这很简单。 – CppLearner 2013-03-24 18:13:54

+0

不要忘记告诉用户出了什么问题。这是我们应该抓住一个特定错误的主要原因。 – CppLearner 2013-03-24 18:14:53