加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – Python cookiecutter循环列表

发布时间:2020-12-15 20:54:56 所属栏目:安全 来源:网络整理
导读:我试图循环 Python cookiecutter json列表中的所有项目,并根据每个项目运行bash命令. 建立 我有以下cookiecutter.json: { "directory_name": "df-sharp","servers": ["db","web"],"myweb_provisioner": "webck"} 我有{{cookiecutter.myweb_provisioner}}.sh
我试图循环 Python cookiecutter json列表中的所有项目,并根据每个项目运行bash命令.

建立

我有以下cookiecutter.json:

{
    "directory_name": "df-sharp","servers": ["db","web"],"myweb_provisioner": "webck"
}

我有{{cookiecutter.myweb_provisioner}}.sh,其中包含此jinja2代码:

{% for server in cookiecutter.servers %}
mkdir -p ~/myproj/host_types/{{ server }}
{% endfor %}

问题

当我运行cookiecutter create-server-tree时,我得到以下内容:

Select servers:
1 - db
2 - web
Choose from 1,2 [1]: 2

和webck.sh中的内容是:

mkdir -p ~/myproj/host_types/w
mkdir -p ~/myproj/host_types/e
mkdir -p ~/myproj/host_types/b

不应出现“选择”菜单.我不想在列表中的2个元素之间进行选择.我想循环它们并构造2个bash命令 – 每个元素一个命令.我试图循环显示列表,如here或here所示.

我想要的是

这就是我想要的:cookiecutter create-server-tree应该生成webck.sh,其中包含以下内容:

mkdir -p ~/myproj/host_types/db
mkdir -p ~/myproj/host_types/web

如何遍历服务器列表并使用每个列表元素(而不是一次只使用一个字符)?

解决方法

事实证明我使用的是错误的术语.如果键值对中的值是普通列表,则cookiecutter将该值(列表)调用为提供“ Multiple Choice options”.因此,如果我将一个普通列表作为关键“服务器”的值,那么我应该得到我上面的选择列表:

Select servers:
1 - db
2 - web
Choose from 1,2 [1]: 2

我需要的是一个嵌套字典作为密钥服务器的值,就像它们显示here一样 – 它被称为字典变量.要使用它来回答我的问题,我将cookiecutter.json文件更改为:

{
    "directory_name": "df-sharp","servers": {"server_list": ["db","server_ips: ["123","456"]"
               },"myweb_provisioner": "webck"
}

然后我用jinja2如下所示:

{% for server in cookiecutter.servers.server_list %}
mkdir -p ~/myproj/host_types/{{ server }}
{% endfor %}

这给了我想要的东西.

但是,我不得不使用cookiecutter create-server-tree –no-input(link).这是因为我无法仅抑制字典变量的提示.我本想要的:

directory_name[df-sharp]: 
myweb_provisioner[webck]:

以及将密钥服务器指定为默认参数的某种方式.实际上,他们有一个默认选项here.它会是这样的,需要使用their API:

cookiecutter('create-server-tree/',no_input=True,extra_context={"servers": {"server_list":['db','web'],"server_ips": ["123","456"]
                                       }
                           }
            )

但是,用户应该如何将这个extra_content = {…}参数合并到一个实际的cookiecutter项目中,并在jinja2模板化脚本中引用“server_list”?我不知道.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读