[英]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.