我需要在Python脚本中设置一些环境变量,我希望从Python调用的所有其他脚本都能看到环境变量的设置。
如果我这样做了,
os.environ["DEBUSSY"] = 1
它抱怨说1必须是一个字符串。
我还想知道如何读取Python中的环境变量(在脚本的后一部分),一旦我设置它。
我需要在Python脚本中设置一些环境变量,我希望从Python调用的所有其他脚本都能看到环境变量的设置。
如果我这样做了,
os.environ["DEBUSSY"] = 1
它抱怨说1必须是一个字符串。
我还想知道如何读取Python中的环境变量(在脚本的后一部分),一旦我设置它。
当前回答
那么os呢?environ["DEBUSSY"] = '1'?环境变量总是字符串。
其他回答
如果你纠结于Flask和unittest,请记住,如果你在任何方法之外设置了一个变量,当你导入应用程序时,这个变量会被读取。可能看起来微不足道,但可以省去一些麻烦。
例如,如果进入你的Flask单元测试你:
导入应用 在setUp方法中设置环境变量。 使用app.test_client()来测试应用程序
进入第二步的变量到第三步时将不会看到,因为在执行第一步时已经读取了该变量。
环境是为代码本身(而不是子进程)冻结的,不能通过编程方式完成。
一个好的解决方案,不管是什么平台,都是将对python的调用包装在一个批处理文件中。例如:如果我在linux上,批处理文件可能看起来像这样
export "DEBUSSY"="1"
python mycode.py
我写了这个小的上下文管理器,它只在缩进块的持续时间内设置变量:
import os
from contextlib import contextmanager
@contextmanager
def extended_env(new_env_vars):
old_env = os.environ.copy()
os.environ.update(new_env_vars)
yield
os.environ.clear()
os.environ.update(old_env)
示例用法(Windows为%,Linux为$):
import subprocess
subprocess.run("echo $ENVTEST %ENVTEST%", shell=True)
with extended_env({"ENVTEST": "17"}):
subprocess.run("echo $ENVTEST %ENVTEST%", shell=True)
subprocess.run("echo $ENVTEST %ENVTEST%", shell=True)
设置变量:
使用键的赋值方法:
import os
os.environ['DEBUSSY'] = '1' #Environ Variable must be string not Int
为了得到或检查它是否存在,
因为操作系统。Environ是一个实例,您可以尝试对象方式。
方法1:
os.environ.get('DEBUSSY') # this is error free method if not will return None by default
将得到'1'作为返回值
方法2:
os.environ['DEBUSSY'] # will throw an key error if not found!
方法3:
'DEBUSSY' in os.environ # will return Boolean True/False
方法4:
os.environ.has_key('DEBUSSY') #last 2 methods are Boolean Return so can use for conditional statements
下面这些呢?
os.environ["DEBUSSY"] = '1'
debussy = int(os.environ.get('DEBUSSY'))
print(type(debussy))
<类“int”>