4

ここで、この 2 時間の間、私を悩ませていた問題があります。複数の行を含むテンプレート ファイルがあり、一部の行では、いくつかの単語を他の単語で変更する必要があります。私のテンプレートは次のようになります。

subnet {{ MY_SUBNET }} netmask {{ MY_NETMASK }} {}

subnet {{ MY_SUBNET }} netmask {{ MY_NETMASK }}
{
option domain-name-servers {{ MY_DOMAIN_IP }}; 
option domain-name {{ MY_DOMAIN_NAME }}; 
option routers {{ MY_GATEWAY }}; 
option broadcast-address {{ MY_BROADCAST }};

私が使用しているコードは次のとおりです。

f = open(DHCPD_PATH, 'w')
g = open(TEMPLATE_PATH, 'r')
patterns = { 
   '{{ MAC_ADDRESS }}'     : mac,
   '{{ IP_ADDRESS }}'      : ip, 
   '{{ MY_IP }}'           : MY_IP,
   '{{ MY_DOMAIN_IP }}'    : MY_DOMAIN_IP,
   '{{ MY_DOMAIN_NAME }}'  : MY_DOMAIN_NAME,
   '{{ MY_NETMASK }}'      : MY_NETMASK,
   '{{ MY_GATEWAY }}'      : MY_GATEWAY,
   '{{ MY_SUBNET }}'       : MY_SUBNET,
   '{{ MY_BROADCAST }}'    : MY_BROADCAST,
}   
content = g.read()
for i,j in patterns.iteritems():
   content = content.replace(i,j)
f.write(content)
f.close()
g.close()

ここに私が得るファイルがあります:

subnet 192.168.10.0 netmask {{ MY_NETMASK }} {}

subnet 192.168.10.0 netmask 255.255.255.0
{
  option domain-name-servers 192.168.10.10;
  option domain-name "localnet.lan";
  option routers 192.168.10.1;
  option broadcast-address 192.168.10.255;
  default-lease-time 600;
  max-lease-time 7200;
  filename "pxelinux.0";
  next-server 192.168.10.3;

この {{ MY_NETMASK }} が残っているのに、そのうちの 1 つが正しく置き換えられ、他のすべてのテンプレート パターンも正しく置き換えられる理由がわかりません。

誰か私にこれについてのヒントを教えてもらえますか? または、少なくともそれを修正する方法を説明してください。

どうもありがとう

4

3 に答える 3

8

@eumiro の推測は正しかった: あなたのスペースの 1 つがスペースではありません。

>>> repr('subnet {{ MY_SUBNET }} netmask {{ MY_NETMASK }} {}')
"'subnet {{ MY_SUBNET }} netmask {{ MY_NETMASK\\xc2\\xa0}} {}'"
                                              ^^^^^^^^^^

非改行スペースのように見えます。

于 2012-09-07T12:46:47.843 に答える
3

ありがとうございます

より完全な答えを提供するために(あなたの問題は私の問題を解決するのに十分明確でしたが)、痛みを免れたvim構成を提供したいと思います:

スペースと表にさまざまな色を提供します。

:set syntax=whitespace

~/.vimrc 構成ファイルの次の行は、ファイルを開いた後に :list コマンドを使用すると、ほとんどの非表示文字を出力します (:list! で通常の表示に戻ります)。

set listchars=nbsp:¤,tab:>-,trail:¤,extends:>,precedes:<,eol:¶,trail:· 

再度、感謝します

于 2012-09-07T13:31:32.543 に答える
2

他の人が指摘している「iffy」のキャラクターは別として...

やり過ぎかもしれませんが、 -jinja2テンプレートライブラリをインストールし、TEMPLATE_PATH(文字列として、または環境やファイルの一部として)提供してから、を発行.renderすると、次のPATTERNSようになります。

PATTERNS = {
    'MAC_ADDRESS': '121422242424',
    # etc...
}

置換も、繰り返し検索/置換されるのではなく、一度に実行されます。テンプレートに適切なデフォルト値を入力することもできます。option something {{ MY_IP|default('127.0.0.1') }}

于 2012-09-07T13:01:49.390 に答える