2013-02-18 90 views
0

我想通過讓python程序從文件中隨機選擇一個名稱然後將其設置爲主機名來更改linux主機名。只有當隨機數字值爲1時,該代碼纔有效。我做錯了什麼?我正在使用的代碼如下。使用python更改Linux主機名

import random 
import os 
import socket 

contents=[] 

with open("/root/Desktop/names.txt") as rnd: 
    for line in rnd: 
     line=line.strip() 
     contents.append(line) 
name = contents[random.randint(0,len(contents)-1)] 
rnd.close() 
name = "hostname -b "+name 
os.system(name) 
hostname = socket.gethostname() 
print "Hostname:", hostname 
+0

'names.txt'裏有什麼?讀取文件後,您也可以嘗試「打印內容」。 – helmbert 2013-02-18 18:03:23

+0

'open()as rnd:... rnd.close()''''''''''''''''''''''''''不需要關閉具有上下文管理器的文件資源(aka,'with')。 – Droogans 2013-02-18 18:07:23

+0

我需要它放在命令行中,因此os.system()是隨機選擇的名稱。 name.txt是從中隨機選擇名稱的文本文件。 – 2013-02-18 18:09:05

回答

2

random模塊提供了一個函數從序列中選擇一個隨機元素:

name = random.choice(contents) 

那請問確切你想要什麼,我想。此外,它的優點是,如果contents由於某種原因而爲空,則會拋出異常。


更新:

順帶一提,你不需要的時候你擺在首位(with open(...) as rnd:)打開文件來調用rnd.close()因爲你使用的是上下文管理器 - 它會自動調用時你離開了with條款的範圍。

+0

提及Python中包含的電池+1。 – 2013-02-18 18:12:47

+0

對不起,我找到了解決方案。我在我的name.txt文件中有空格。第一個名字是'John',其他是第一個名字(空格)姓。通過刪除.txt文件中名稱中的空格,可以解決問題。謝謝你的幫助。 – 2013-02-18 18:30:39