記一次使用python腳本來修改hosts檔案,由于公司伺服器需要換ip位址,伺服器裡都是Linux系統,而hosts檔案中有些解析的ip,手動一台一台的解析太麻煩,就寫了這個腳本。本來以為感覺很簡單,但是寫的過程真不好寫,也試過shell腳本,不過也不好寫。然後就直接用python寫,也找了一些網上的教程,不過也沒有很好的解決問題。下面把腳本貼出來記錄下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<code>#!/usr/bin/python</code>
<code>#coding:utf8</code>
<code>import</code> <code>os</code>
<code>import</code> <code>sys</code>
<code>import</code> <code>re</code>
<code>hostsfile</code><code>=</code><code>"/etc/hosts"</code> <code>#hosts檔案絕對路徑</code>
<code>ip_dict </code><code>=</code> <code>{</code><code>"1.1.1.1"</code><code>:</code><code>"2.2.2.1"</code><code>,</code><code>"1.1.1.2"</code><code>:</code><code>"2.2.2.2"</code><code>,</code><code>"1.1.1.3"</code><code>:</code><code>"2.2.2.3"</code><code>} </code><code>#這是自定義的字典形式為:old_ip:new_ip</code>
<code>ip </code><code>=</code> <code>[] </code><code>#定一個空清單,來存儲old_ip的清單</code>
<code>Line</code><code>=</code><code>[] </code><code># 定一個空清單,來存儲修改後的hosts檔案内容的清單</code>
<code>fd </code><code>=</code> <code>open</code><code>(hostsfile).readlines() </code><code>#打開檔案</code>
<code>#用for循環得到old_ip的清單</code>
<code>for</code> <code>old_ip </code><code>in</code> <code>ip_dict.keys():</code>
<code> </code><code>ip.append(old_ip)</code>
<code>#用for循環列出每一行,并進行比對old_ip 如果比對到就使用re.sub()進行替換。并存儲在Line這個清單中</code>
<code>for</code> <code>line </code><code>in</code> <code>fd:</code>
<code> </code><code>if</code> <code>line.strip() </code><code>=</code><code>=</code> <code>'':</code>
<code> </code><code>#continue</code>
<code> </code><code>Line.append(line) </code><code>##如果是空行也加入清單中,保證檔案内容與原内容形式一緻</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>h_ip </code><code>=</code> <code>line.strip().split()[</code><code>0</code><code>] </code><code>##取得hosts檔案中的ip位址</code>
<code> </code><code>if</code> <code>h_ip </code><code>in</code> <code>ip:</code>
<code> </code><code>lin </code><code>=</code> <code>re.sub(h_ip,ip_dict[h_ip],line) </code><code>#如果比對到就進行替換</code>
<code> </code><code>print</code> <code>"檔案修改的内容如下:"</code>
<code> </code><code>print</code> <code>"%s --> %s"</code> <code>%</code><code>(line.strip(</code><code>"\n"</code><code>),lin)</code>
<code> </code><code>Line.append(lin)</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>Line.append(line)</code>
<code>#最後得到Line清單</code>
<code>#重新把清單的内容寫入到/etc/hosts檔案中</code>
<code>fc </code><code>=</code> <code>open</code><code>(hostsfile,</code><code>'w'</code><code>)</code>
<code>fc.writelines(Line)</code>
<code>fc.close()</code>
本文轉自 ZhouLS 51CTO部落格,原文連結:http://blog.51cto.com/zhou123/1710459