【问题标题】:Python variable value from separate file?来自单独文件的Python变量值?
【发布时间】:2018-05-24 05:12:55
【问题描述】:

我有一个每天 24 小时运行的 Python 脚本。

此脚本中的模块正在使用我希望不时更改的变量值,而无需停止脚本,编辑模块文件,然后再次启动脚本(我需要尽可能避免中断)。

我考虑将变量存储在一个单独的文件中,模块会在需要时从文件中获取新值并使用它们。

Pickle 似乎是一种解决方案,但不是人类可读的,因此不容易更改。也许是一个 JSON 文件,或者我再次导入的另一个 .py 文件?

对我来说,这样做的另一个好处是,在中断的情况下(例如服务器重启),如果我从单独的文件加载它们,我可以使用最新的变量值恢复脚本。

有没有推荐的做这些事情的方法?

类似的东西:

# variables file:
variable1 = 10
variable2 = 25


# main file:
while True:
    import variables
    print('Sum:', str(variable1+variable2))
    time.sleep(60)

【问题讨论】:

    标签: python


    【解决方案1】:

    使用变量维护文本文件的一种简单方法是使用 YAML 格式。 This answer explains怎么用,基本上:

    import yaml
    stream = open("vars.yaml", "r")
    docs = yaml.load_all(stream)
    

    如果您有多个变量,最好检查文件描述符以查看文件是否最近更新,并且仅在文件发生更改时重新加载变量。

    import os
    last_updated = os.path.getmtime('vars.yaml')
    

    最后,由于您希望避免脚本中断,最好让脚本捕获 YAML 文件中的任何错误并警告用户,而不是仅仅抛出异常并死掉。但也要记住“错误永远不应该默默地过去”。这里最好的方法是什么取决于您的用例。

    【讨论】:

    • 线程安全吗?我的意思是在脚本加载时我更新 vars.yaml 的可能性很小,它会被处理得很好吗?
    猜你喜欢
    • 2022-11-28
    • 1970-01-01
    • 2013-01-11
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    相关资源
    最近更新 更多