2011-09-22 2 views
4

저는 몇 줄을 추가하기 위해 호스트 파일에 액세스해야하는 Python 응용 프로그램을 가지고 있습니다. 모든 것은 내 테스트 파일에서 작동했지만 프로그램에서 실제로/etc/hosts에있는 호스트 파일을 수정하라고 명령했을 때 IOError 13이 발생했습니다. 이해할 경우 내 앱에 루트 권한이 없습니다.IOError : 13, Python을 통해/etc/hosts에 쓸 때 'Permission denied'가 발생했습니다.

제 질문은이 문제를 어떻게 우회 할 수 있습니까? 사용자에게 비밀번호를 묻는 방법이 있습니까? Windows 컴퓨터에서 앱을 실행하는 경우 프로세스가 달라질까요? 또한,

f = open("/etc/hosts", "a") 
f.write("Hello Hosts File!") 

나는 최종 제품에 대한 py2app 및 py2exe에를 사용하여 계획 :

여기에 문제의 코드입니다. 그들은 나를 위해 루트 권한 문제를 처리할까요? 당신이 sudoers 목록에있는 경우

답변

5

이 처리하는 가장 쉬운 방법은 임시로 변경 사항을 작성하는 것입니다 사용할 수있는 원격 설정 제어하려면 http://en.wikipedia.org/wiki/Sudosudo에 대한

더 그런 다음 보호 된 파일을 덮어 쓸 프로그램을 실행하십시오. 이렇게 :

with open('/etc/hosts', 'rt') as f: 
    s = f.read() + '\n' + '127.0.0.1\t\t\thome_sweet_home\n' 
    with open('/tmp/etc_hosts.tmp', 'wt') as outf: 
     outf.write(s) 

os.system('sudo mv /tmp/etc_hosts.tmp /etc/hosts') 

파이썬 프로그램이 sudo를 실행하면 sudo 프로그램은 사용자에게 암호를 묻습니다. 이것을 GUI 기반으로 원하면 GUI sudo (예 : "gksu")를 실행할 수 있습니다.

Windows의 경우 hosts 파일은 \ Windows 아래 몇 개의 하위 디렉토리에 있습니다. 동일한 일반적인 트릭을 사용할 수 있지만 Windows에는 sudo 명령이 없습니다. 여기 등가물에 대한 논의이다

https://superuser.com/questions/42537/is-there-any-sudo-command-for-windows

+0

감사합니다. 이것은 내가 필요한 것에 가깝습니다. 스크립트는 그래픽이지만 인증을 위해 문자열을 시스템에 전달하는 방법이 있습니까? 사용자 유형을 터미널에 넣는 것을 피하고 싶습니다. – Parker

+1

제안대로 gksu를 실행하면 사용자에게 GUI 대화 상자가 나타납니다. 일반 "sudo"를 실행하면 터미널에서 프롬프트됩니다. – steveha

+0

죄송합니다, 나는 어떤 이유로 그것을 잡지 못했습니다. 하지만, 나는 GKSU가 없다. QT와 비슷한 것이 무엇인지 아십니까? – Parker

6

, 당신은 sudo로 progamm를 시작할 수 있습니다

sudo python append_to_host.py 

sudo를 루트 권한으로 파이썬 인터프리터를 실행합니다. 처음 할 때 암호를 묻는 메시지가 표시됩니다. 나중에 sudo 통화가 오래 걸리지 않을 경우 이후 통화에서 묻지 않습니다.

sudoers 목록에있는 경우 (대부분의 경우 /etc/sudoers) 관리자가 신뢰한다고 말합니다. sudo으로 전화 할 경우 root 암호가 아닌 사용자에게 암호를 묻습니다. 올바른 사용자가 터미널에 앉았다는 것을 증명해야합니다.

이 당신이 -S 명령 줄 스위치를 사용하거나 http://www.noah.org/wiki/pexpect

+0

감사합니다,하지만 이상적으로 나는 sudo는 같은 스크립트를 실행하려면 사용자가 필요로하는 것을 피하기하고 싶습니다. 비밀번호가 있으면 백그라운드에서 수행 할 수 있습니까? – Parker

+0

나는 'sudo -S'에 대한 좀 더 많은 조사를했으며, 사용자가 입력 한 암호를 시스템에 전달하는 데 사용할 수있는 것처럼 보입니다. 감사! – Parker

관련 문제