bash - Python cookiecutter 遍历列表

标签 bash python-2.7 jinja2 cookiecutter

我正在尝试遍历 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

Select 菜单不应出现。我不想在列表中的 2 个元素之间进行选择。我想遍历它们并构造 2 个 bash 命令——每个元素一个命令。我正在尝试遍历列表,如图所示 herehere .

我想要什么

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

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

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

最佳答案

原来我用错了术语。如果键值对中的值是一个普通列表,则 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", "web"],
                "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]: 

以及一些将键 servers 指定为默认参数的方法。实际上,他们有一个默认选项 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”?我不知道。

关于bash - Python cookiecutter 遍历列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47466204/

相关文章:

python - Flask 中的速度优化

python - 可能更改 Mako 的内联开始/结束语法?

java - 为什么我可以直接从 bash 执行 JAR?

mysql - 为什么 mysql 通过 ssh 命令不提示输入密码?

python - pySerial 程序停止正常工作

python - 如何在 python 2.7 中从列表中迭代和提取数据

flask - Jinja2:为每 3 个项目创建新行

bash - 如何用空格替换变量的逗号分隔字符串?

linux - 用于查找两个文件之间出现次数增加的 Shell 脚本

python - 在 PySimpleGUI 中隐藏和取消隐藏文本、输入和 FileBrowse()