簡體   English   中英

為什么 my.env 文件中的變量即使在我的 Python 腳本中更改后仍會重置為原始文件?

[英]Why are the variables inside my .env file resetting to the original file even after changing it from inside my Python script?

我正在嘗試為我的原始腳本實現一個檢查點機制,其結構如下:

import os
import sys
from dotenv import load_dotenv

def main():
    load_dotenv()

    checkpoint = int(os.getenv('CHECKPOINT'))

    if checkpoint == 0:
        ...
        do something
        ...
        checkpoint += 1
        os.environ['CHECKPOINT'] = str(checkpoint)

    checkpoint = int(os.getenv('CHECKPOINT'))

    if checkpoint >= 1:
        ...
        do something
        ...
        checkpoint += 1
        os.environ['CHECKPOINT'] = str(checkpoint)

我的.env文件

CHECKPOINT=0

雖然此方法在 Windows 機器(本地主機)內工作,但它不適用於我的 Ubuntu 服務器。

也就是說,如果我的代碼在檢查點 2 的某處失敗,我應該只能從該點重新運行它。

例如,如果代碼在 checkpoint=2 處失敗:

Windows 機器

checkpoint=2

Ubuntu 機器

checkpoint=0

另外,我正在使用 try 和 except 從代碼中捕獲故障,如果有任何使用,則退出系統:

sys.exit()

我可以使用config.json 不時設置這些,但我真的很想知道為什么會這樣。

這是一個最小的工作示例:

import os


name = 'CHECKPOINT'


def getenv():
    return int(os.getenv(name) or 0)


def putenv(value):
    print(f'{name} (before): {getenv()}')
    os.environ[name] = str(value)
    print(f'{name} (after {value}): {getenv()}')
    return getenv()


checkpoint = getenv()
if checkpoint == 0:
    checkpoint = putenv(checkpoint + 1)
if checkpoint >= 1:
    checkpoint = putenv(checkpoint + 1)

當你調用它時:

$ CHECKPOINT=1 python3 1.py 
CHECKPOINT (before): 1
CHECKPOINT (after setting 2): 2
$ echo -n $CHECKPOINT
$ python3 1.py 
CHECKPOINT (before): 0
CHECKPOINT (after setting 1): 1
CHECKPOINT (before): 1
CHECKPOINT (after setting 2): 2

CHECKPOINT 環境變量不會持久化,因為它存儲在退出的第一個進程 (python3 1.py) 中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM