2017-11-24 8 views
3

파이썬 cookiecutter json 목록의 모든 항목을 반복하고 각 항목을 기반으로 bash 명령을 실행하려고합니다.Python cookiecutter loop over list

설정

나는 cookiecutter.json을 다음 있습니다 :

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

문제

:

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

나는이 jinja2 코드를 포함하는 {{cookiecutter.myweb_provisioner}}.sh

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

webck.sh의 내용은 다음과 같습니다 : 나는 cookiecutter create-server-tree을 실행하면

, 나는 다음과 같은 얻을

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

Select 메뉴가 나타나지 않아야합니다. 목록의 두 요소 중 하나를 선택하고 싶지 않습니다. 루프를 반복하고 2 개의 bash 명령을 만들려고합니다. here 또는 here과 같이 목록을 반복하려고합니다. cookiecutter create-server-treewebck.sh을 생산해야 다음이 포함 된 : 나는 servers 목록을 반복하고 목록의 각 요소를 사용할 수있는 방법

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

나는이 내가 원하는 것입니다

원하는 것은

(한 번에 한 글자 대신에)?

답변

0

내가 잘못된 용어를 사용하고있는 것으로 나타났습니다. 키 - 값 쌍의 값이 일반 목록이면 cookiecutter는 해당 값 (목록)을 "Multiple Choice options"으로 제공합니다. 내가 키 "서버"에 대한 값으로 일반 목록에 넣어한다면, 그때는 내가 위에서있어 선택의 목록을 얻을 것으로 기대한다 : 나는 값으로 중첩 된 사전이었다 필요한 무엇

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

키 서버의 경우 here과 같이 사전 변수라고합니다.

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

을 아래와 같이 그때 jinja2을 사용 : 내 질문에 대답하려면이 옵션을 사용하려면,이 내 cookiecutter.json 파일을 변경

{% 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"] 
             } 
          } 
      ) 

, 어떻게 사용자가 실제 cookiecutter 프로젝트로이 extra_content={...} 인수를 통합하고 jinja2 템플릿 스크립트에서 "server_list"을 참조해야합니까? 나는 모른다.