Python中脚本集合的配置变量

2024-09-30 01:20:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组用Python编写的脚本。它们都可以独立执行。但是,在大多数情况下,它们应该一个接一个地执行,因此有一个MainScript.py以适当的顺序调用它们。每个脚本都有一些可配置的变量(我们将它们称为Root_DirData_Dir和{})。如果将此脚本集合移动到其他计算机,或需要处理不同的数据,则需要更改这些变量值。由于有许多脚本,这种复制很烦人,而且容易出错。我想将所有配置变量分组到一个文件中。在

我试着让Config.py按照this thread包含它们,但是import Config生成{},因为它们不是包的一部分。在

然后我尝试依赖变量继承:在调用所有其他变量的MainScript.py中定义它们一次。这是可行的,但是我意识到每个脚本都不能独立运行。为了解决这个问题,我尝试在MainScript.py和其他文件中添加useGlobal=True

if (useGlobal is None or useGlobal==False):
  # define all variables

但当脚本独立运行时,这将失败:NameError: name 'useGlobal' is not defined。解决方法是定义useGlobal并在独立于MainScript.py运行脚本时将其设置为False。有更优雅的解决方案吗?在


Tags: 文件数据py脚本configfalsedata定义
3条回答

最好的方法是使用主目录(~/.config/yourscript/config.json)中的配置文件。在

然后,可以在启动时加载文件,并在文件不存在时提供默认值:

示例(配置.py)公司名称:

import json

default_config = {
    "name": "volnt",
    "mail": "oh@hi.com"
}

def load_settings():
    settings = default_config
    try:
        with open("~/.config/yourscript/config.json", "r") as config_file:
            loaded_config = json.loads(config_file.read())
            for key in loaded_config:
                settings[key] = loaded_config[key]
    except IOError: # file does not exist
        pass
    return settings

对于配置文件,使用json而不是python是个好主意,因为它使使用脚本的人更容易编辑。在

其思想是python希望访问文件-包括配置.py-主要作为模块的一部分。在

好的一点是,Python使构建模块(即Python包)变得非常容易——初始化它可以通过创建一个

__init__.py

在每个目录中作为模块、子模块、子模块等的文件。在

因此,如果您已经创建了这个文件,那么您的导入应该通过。在

如果您还有其他问题,请看优秀的python documentation。在


正如cleros所建议的,ConfigParser module似乎是最接近我想要的东西(每个文件中有一行语句,它将设置多个变量)。在

相关问题 更多 >

    热门问题