我需要在Python脚本中设置一些环境变量,我希望从Python调用的所有其他脚本都能看到环境变量的设置。
如果我这样做了,
os.environ["DEBUSSY"] = 1
它抱怨说1必须是一个字符串。
我还想知道如何读取Python中的环境变量(在脚本的后一部分),一旦我设置它。
我需要在Python脚本中设置一些环境变量,我希望从Python调用的所有其他脚本都能看到环境变量的设置。
如果我这样做了,
os.environ["DEBUSSY"] = 1
它抱怨说1必须是一个字符串。
我还想知道如何读取Python中的环境变量(在脚本的后一部分),一旦我设置它。
当前回答
如果我做os。environ["DEBUSSY"] = 1,它 抱怨说1必须是 字符串。
然后做
os.environ["DEBUSSY"] = "1"
我还想知道如何阅读 python中的环境变量(在 脚本的后面部分)一旦我设置 它。
只需使用os。environ["德彪西"],如在
some_value = os.environ["DEBUSSY"]
其他回答
有一个很好的开箱即用的Python解决方案叫做pycrosskit。 它将为Linux和Windows创建持久的环境变量。
用法:
# Will Set Persistent Value for Variable in System
# * subkey works only for windows like file in folder
# * reg_path works only for windows as register path
SysEnv.set_var(name, value, subkey, reg_path=default_reg_path)
# Will Get Persistent Value for Variable in System
# * reg_path works only for windows as register path
# * delete, deletes key from environment and its subkeys after read
SysEnv.get_var(name, reg_path=default_reg_path, delete=False)
环境是为代码本身(而不是子进程)冻结的,不能通过编程方式完成。
一个好的解决方案,不管是什么平台,都是将对python的调用包装在一个批处理文件中。例如:如果我在linux上,批处理文件可能看起来像这样
export "DEBUSSY"="1"
python mycode.py
您可能需要考虑代码健壮性的其他方面;
当您将整数值变量存储为环境变量时,请尝试
os.environ['DEBUSSY'] = str(myintvariable)
然后对于检索,考虑到要避免错误,就应该尝试
os.environ.get('DEBUSSY', 'Not Set')
可能将'-1'替换为'未设置'
所以,把这些放在一起
myintvariable = 1
os.environ['DEBUSSY'] = str(myintvariable)
strauss = int(os.environ.get('STRAUSS', '-1'))
# NB KeyError <=> strauss = os.environ['STRAUSS']
debussy = int(os.environ.get('DEBUSSY', '-1'))
print "%s %u, %s %u" % ('Strauss', strauss, 'Debussy', debussy)
如果你纠结于Flask和unittest,请记住,如果你在任何方法之外设置了一个变量,当你导入应用程序时,这个变量会被读取。可能看起来微不足道,但可以省去一些麻烦。
例如,如果进入你的Flask单元测试你:
导入应用 在setUp方法中设置环境变量。 使用app.test_client()来测试应用程序
进入第二步的变量到第三步时将不会看到,因为在执行第一步时已经读取了该变量。
你应该把字符串值赋给环境变量。
操作系统。environ["DEBUSSY"] = "1"
如果您想读取或打印环境变量,请使用
打印os.environ(“德彪西”)
此更改仅对分配该值的当前进程有效,不会永久更改该值。子进程将自动继承父进程的环境。