接受用户永久输入的最佳方式?

时间:2014-10-22 16:34:56

标签: python

我有一个脚本,它有一个必须由用户设置的全局变量,而且所有变量都是一个包含路径名的字符串,每次脚本运行时都需要它。我不想每次都提示用户输入此路径名。

目前,我正在考虑要求用户永久设置环境变量,方法是将其添加到/etc/profile.bash_profile,然后使用sys.environ字典访问它。另一种选择是拥有配置文件并要求用户编辑相关行,然后使用configparser进行阅读。

是否有建议的方法来执行此操作?

1 个答案:

答案 0 :(得分:3)

使用Python ConfigParser模块或Python 3中的configparser

它遵循标准* .ini格式,允许您以易于阅读的格式将信息从一个运行存储到下一个运行。格式本质上是自我记录的,因为您可以在文件中命名密钥,也可以在配置文件中添加注释。

它还为环境变量方法提供了更大的灵活性,因为它更容易修改配置文件,并且无论平台或其他环境设置如何,都可以轻松地将文件与脚本一起传递到下一个计算机。

您的用例正是配置文件的用途,您只需使用少量代码即可完成任务:

cfg_parser = ConfigParser.ConfigParser() # Python 2.x
if cfg_parser.read('config_file_name.ini'):
    path = cfg_parser.get('SECTION_NAME', 'path')
else:
    print("No config file found")

这为您提供了路径,您要求用户做的就是编辑文本文件的一行,而不是进行任何系统更改。

此外,这为您在未来扩展提供了很大的空间。如果您希望在脚本中添加更多选项,则修改配置文件要比提出新的环境变量容易得多。

最后,ConfigParser库允许您以编程方式编辑配置文件。您可以添加一个命令行选项(可能带有argparse),允许您的用户指定路径,并让您的脚本使用路径自动编写自己的配置文件。现在,您的用户永远不必手动触摸配置文件,也不必再次在命令行上添加路径。更好的是,如果路径发生变化,您的用户可以再次使用命令行路径选项运行它,瞧,配置文件中的旧路径将被覆盖,新的路径将被保存。

由于其灵活性和用户友好性,我肯定会推荐配置文件方法。