• ベストアンサー

pythonで作成する読み込みファイル内の設定項目変更

(1)IPアドレスが複数書いてある設定ファイルを読み込ませた際に、規定のファイル名に書き換える。  (2)規定ファイル名に書き換えたファイルの特定の部位(例えば5-10行目だけ)をIPアドレスの設定数分ループさせる処理。 pythonでの書き方が分からなくて 御存じの方がいらっしゃったら教えてください。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

なんかアヤシイCプログラムですが、 Pythonで書くとおおむねこんな感じになります。 template_string = '$script start vifnum=%d bridge=xenbr%d netdev=eth%d' wf = open('network-bridge_xen.txt', 'w') max_count=10 for i in range(0, max_count+1): ____print >>wf, template_string % (i, i, i) wf.close() 出力ファイルの中身はこう。 $script start vifnum=0 bridge=xenbr0 netdev=eth0 $script start vifnum=1 bridge=xenbr1 netdev=eth1 $script start vifnum=2 bridge=xenbr2 netdev=eth2 $script start vifnum=3 bridge=xenbr3 netdev=eth3 $script start vifnum=4 bridge=xenbr4 netdev=eth4 $script start vifnum=5 bridge=xenbr5 netdev=eth5 $script start vifnum=6 bridge=xenbr6 netdev=eth6 $script start vifnum=7 bridge=xenbr7 netdev=eth7 $script start vifnum=8 bridge=xenbr8 netdev=eth8 $script start vifnum=9 bridge=xenbr9 netdev=eth9 $script start vifnum=10 bridge=xenbr10 netdev=eth10

vis3sock
質問者

お礼

お恥ずかしい限りのC言語を晒してしまいましたm(_ _)m お影で、丁寧に対応して頂いて本当にありがとうございます! templateの使い方や組み方など、教えていただいて大感激でした。

その他の回答 (2)

回答No.2

なんか丸投げのにおいを感じたんだけど気のせい?w まだよくわからないんだけど、 case ${OP} in start) $script start vifnum=0 bridge=xenbr0 netdev=eth0 $script start vifnum=1 bridge=xenbr1 netdev=eth1 $script start vifnum=2 bridge=xenbri netdev=dummy0 ;; スクリプトのこういう部分(stop と statusも)を、用意しているIPアドレス(=インターフェース)の数だけ 自動的に番号を振って生成したいということでしょうか? であれば、IPアドレスを列挙しているファイルを読み込んで、 空行とかコメント行を除いた数-1まで0から数え上げていけばいいのでは? 文字列の置き換えは、stringクラスに replaceメソッドがありますからそれを使えばよいです。 正規表現を使いたいなら re,sub('検索パターン', '置換文字列', 対象の変数) などが使えます。 Pythonにはsprintfやprintfはありませんが、 "vifnum=%d bridge=xenbr%d netdev=eth%d" % (0, 0, 0) のようにすれば同様の結果が得られます。 ファイルのオープンの仕方などはマニュアル見ればすぐわかることなので省略します。

vis3sock
質問者

お礼

どういったコーディングをすれば、期待値を得られるのか。 フローも組めていない状態でした。 分かりにくい伝え方しかできなくてすみませんです。 >自動的に番号を振って生成したいということでしょうか? それです! 仮想化用の network-bridge.xenを作成したさいの start) $script start vifnum=0 bridge=xenbr0 netdev=eth0 : この部分のみ複数所持するIPアドレス数分ループさせたかったのです。 C言語で例えるなら(すみません(>_<)!!) int main(void) { ___FILE *fp; ___short buf[512] ___int i; ___int max=3; __fp=open("network-bridge_xen.txt","w"); ____if(fp=NULL) ___return 0; __fread(buf, sizeof(short),100,fp); ____if( buf ==vifnum=0 bridge=xenbr0 netdev=eth0) ____{ _____for(i = 0; i = max; i++) _____{ _______fprintf(fp, "vifnum=%d __________________bridge=xenbr%dnetdev=eth%d\n",i,i,i); ______} _____} } pythonでの書き方が分からなかったのです。 ずうずうしくも・・・・ re,sub('検索パターン', '置換文字列', 対象の変数)なら re.sub('vifnum=%d…','vifnum=%d…','vifnum=%d…' %0) ですか?

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

もうちょっと具体的な例を挙げもらえますか? たとえば設定ファイルの書式が 127.0.0.1 192.168.0.1 192.168.15.127 のようになっているとか、「規定のファイル名に書き換える」 というのはどういう操作なのか。とか 127.0.0.1 → localhost のようなもの? (2)の方もどういう動作なのかよくわかりません。

vis3sock
質問者

補足

すみません。分かりにくいですよね。 具体的には・・・ (1) [ /scripts]pwd /etc/xen/scripts scriptsの中にある「network-bridge」スクリプトの名前を「network-bridge.xen」に変更する。 (2)変更されたnetwork-bridge.xenの中に書き込まれる情報は以下URLを参考にnetwork-bridge.xenを作成し、 start,stop,status項目に対してそれぞれ所持するIPアドレス分(eth0~ethX)設定項目を書き込みたい。 (概要→「xenbr0」と「xenbr1」はそれぞれ物理デバイスのeth0とeth1に関連づけられ domaiU(仮想化)のネットワークもeth0とeth1と関連つければdomaiU(仮想化)でも外部と通信化となれる。) このときのstart,stop,status項目に対してそれぞれ所持するIPアドレス分(eth0~ethX)設定項目を書き込みたいのです。 なお、IPアドレスはあらかじめ[number]に格納している状態で >設定ファイルの書式は >127.0.0.1 >192.168.0.1 >192.168.15.127 まさしくそうです! 3個あるIPアドレス情報→numberに格納されている。 よろしくお願いいたします。 以下の情報を元に作成しております。 http://itpro.nikkeibp.co.jp/article/COLUMN/20061010/250215/?P=3&ST=virtual

関連するQ&A