2013-02-18 2 views
0

파이썬 프로그램이 임의로 파일의 이름을 선택한 다음 호스트 이름으로 설정하여 리눅스 호스트 이름을 변경하려고합니다. 이 코드는 무작위 숫자 값이 1 일 때만 작동합니다. 내가 잘못 했나요? 내가 사용하고있는 코드는 다음과 같습니다.리눅스 호스트 이름을 파이썬으로 바꾸기

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'에 무엇이 있습니까? 파일을 읽은 후에'print contents'를 시도해 볼 수도 있습니다. – helmbert

+0

'open()을 rnd : ... rnd.close()'와 함께 사용하면 컨텍스트 관리자가있는 파일 리소스를 닫을 필요가 없습니다 (별칭은'with'). – Droogans

+0

나는 무작위로 선택한 이름 인 os.system()을 명령 줄에 넣어야합니다. name.txt는 임의로 이름을 선택하는 텍스트 파일입니다. –

답변

2

random 모듈은 시퀀스에서 임의의 요소를 선택할 수있는 기능을 제공한다 :

정확한 당신이 원하는 것을
name = random.choice(contents) 

, 나는 생각한다. 또한 어떤 이유로 든 contents이 비어 있으면 예외가 발생한다는 이점이 있습니다.


업데이트 :

이 통과, 당신은 당신이 컨텍스트 관리자를 사용하고 있기 때문에 당신이 먼저 (with open(...) as rnd:)에서 파일을 열 때 rnd.close()를 호출 할 필요가 없습니다 -이 때 자동으로 호출됩니다 with 절의 범위를 벗어납니다.

+0

+1 파이썬에 포함 된 배터리를 언급합니다. –

+0

죄송합니다. 해결책을 찾았습니다. 내 name.txt 파일에 공백이 있습니다. 이름은 'John'이었고 나머지는 이름 (우주) 성이었습니다. .txt 파일에서 이름의 공백을 제거하면 문제가 해결되었습니다. 모든 도움에 감사드립니다. –

관련 문제