[英]how to set env variables in python code
我最近开始用python编码。 我正在尝试创建一个环境变量,并使用python为其分配列表。 因此,当我尝试通过命令行(如printenv
读取环境变量时,它将在此处列出。
这是我在python中的代码:
from API_CALLS import Post_Request as Request
import os
class VTM_Config:
@staticmethod
def validate_pool_nodes(url, headers, expected_num_of_active_nodes):
try:
print('\nNow Executing Validate VTM Configs...\n')
# validate that vtm api works by sending a get_session_with_ssl call to the url
vtm_get_session_response = Request.get_session_with_ssl(url=url, headers=headers)
data = vtm_get_session_response
active_nodes = [
n['node']
for n in data['properties']['basic']['nodes_table']
if n['state'] == 'active'
]
actual_num_of_active_nodes = len(active_nodes)
if expected_num_of_active_nodes != actual_num_of_active_nodes:
print("Number of Active Nodes = {}".format(actual_num_of_active_nodes))
raise Exception("ERROR: You are expecting : {} nodes, but this pool contains {} nodes".format(
expected_num_of_active_nodes, actual_num_of_active_nodes))
else:
print("Number of Active Nodes = {}\n".format(actual_num_of_active_nodes))
print("Active servers : {}\n".format(active_nodes))
os.environ["ENABLED_POOL_NODES"] = active_nodes
return os.environ["ENABLED_POOL_NODES"]
except Exception as ex:
raise ex
我正在尝试使用os.environ["ENABLED_POOL_NODES"] = active_nodes
创建一个环境变量,并尝试返回它。
当我运行这段代码,我得到这样的错误:提升类型错误(“海峡预期,而不是%S%类型(值) 的名称 。)类型错误:STR预计,就不一一列举。
问题:如何将列表分配给环境变量。
正如@Jean-Francois Fabre
在上述评论中指出的那样,这可能不是解决您要解决的问题的最佳方法。 但是,要回答标题和帖子最后一行中的问题:
问题:如何将列表分配给环境变量。
您不能直接将列表分配给环境变量。 这些本质上是字符串值,因此您需要以某种方式将列表转换为字符串。 如果您只需要将整个内容传递回去,则可以执行以下操作:
os.envrion["ENABLED_POOL_NODES"] = str(active_nodes)
这只会将列表转换成字符串,看起来像:“ ['a', 'b', 'c']
”。 根据要对下游的env变量执行的操作,可能需要以不同的方式处理它。
因此,感谢大家,这是一个简单的解决方案。 我最终只是返回字符串值并打印到控制台,在该控制台中,我的jenkins作业中的shell脚本将获得输出:
def validate_pool_nodes(url, headers, expected_num_of_active_nodes):
try:
print('\nNow Executing Validate VTM Configs...\n', file=sys.stderr)
# validate that vtm api works by sending a get_session_with_ssl call to the url
vtm_get_session_response = Request.get_session_with_ssl(url=url, headers=headers)
data = vtm_get_session_response
active_nodes = {
n['node']
for n in data['properties']['basic']['nodes_table']
if n['state'] == 'active'
}
actual_num_of_active_nodes = len(active_nodes)
if expected_num_of_active_nodes != actual_num_of_active_nodes:
print("Number of Active Nodes = {}".format(actual_num_of_active_nodes), file=sys.stderr)
raise Exception("ERROR: You are expecting : {} nodes, but this pool contains {} nodes".format(
expected_num_of_active_nodes, actual_num_of_active_nodes))
else:
print("Number of Active Nodes = {}\n".format(actual_num_of_active_nodes), file=sys.stderr)
return str(active_nodes)
except Exception as ex:
raise ex
这是“主要” python方法:
if __name__ == '__main__':
arg1 = sys.argv[1]
arg2 = int(sys.argv[2])
run_prereq = Prerequisites()
run_prereq.validate_login_redirect(pool_arg=arg1)
nodes_list = run_prereq.validate_pool_nodes(pool_arg=arg1, num__of_nodes_arg=arg2)
sys.stdout.write(nodes_list)
sys.exit(0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.