Python은 권한 드롭이있는 루트 실행 스크립트에서 Firefox Webbrowser를 실행하지 못합니다.
문제
Sudoed Python 스크립트에서 Firefox를 실행할 수는 없습니다. 내가 쓰면
$ sudo python >>> import os >>> import pwd, grp >>> uid = pwd.getpwnam('norby')[2] >>> gid = grp.getgrnam('norby')[2] >>> os.setegid(gid) >>> os.seteuid(uid) >>> import webbrowser >>> webbrowser.get('firefox').open('www.google.it') True >>> # It returns true but doesn't work >>> from subprocess import Popen,PIPE >>> p = Popen('firefox www.google.it', shell=True,stdout=PIPE,stderr=PIPE) >>> # Doesn't execute the command >>> You shouldn't really run Iceweasel through sudo WITHOUT the -H option. Continuing as if you used the -H option. No protocol specified Error: cannot open display: :0
나는 그것이 파이썬 문제가 아니라 Firefox/Iceweasel/Debian 구성 문제라고 생각합니다. 아마도 Firefox는 euid가 아닌 UID 만 읽고 UID가 동일하기 때문에 프로세스를 실행하지 않을 수도 있습니다. 어떻게 생각하십니까?
해결책
이것은 당신의 환경 일 수 있습니다. 권한을 변경하면 여전히 루트 사용자 디렉토리에서 $ 홈을 가리키는 것과 같은 환경 변수를 남겨 두며, 이는 액세스 할 수 없습니다. 변경하여 이러한 변수를 변경하는 것이 좋습니다. os.environ
브라우저를 시작하기 전에. 확인할 가치가있는 다른 변수도있을 수도 있습니다.
제휴하지 않습니다 StackOverflow