如何在 Python 代码中设置 env 变量



我最近开始用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 创建一个环境变量并尝试返回它。

当我运行此代码时,我收到如下错误: 提高类型错误("str 预期,而不是 %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)

最新更新