为什么我的 .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 机器(localhost)中有效,但它不适用于我的 Ubuntu 服务器。
也就是说,如果我的代码在检查点 2 的某处失败,我应该只能从该点重新运行它。
例如,如果代码在检查点=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) 中。
我正在尝试使用以下结构为我的原始脚本实施检查点机制:
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 机器(localhost)中有效,但它不适用于我的 Ubuntu 服务器。
也就是说,如果我的代码在检查点 2 的某处失败,我应该只能从该点重新运行它。
例如,如果代码在检查点=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) 中。