그래서 서브 프로세스를 사용하여 파이썬 스크립트 내에서 수퍼 유저로 프로세스를 실행하려고합니다.파이썬 스크립트에서 슈퍼 유저로 명령을 실행 중
proc = subprocess.Popen('sudo apach2ctl restart',
shell=True, stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
같은 ipython 쉘 뭔가에서 잘 작동하지만 최대한 빨리 스크립트로 스틱으로 나는 받기 시작 : sudo: apach2ctl: command not found
합니다.
이것은 sudo가 우분투에서 환경을 처리하는 방식 때문이라고 생각합니다. (나는 또한 아무 소용으로 sudo -E apche2ctl restart
및 sudo env path=$PATH apache2ctl restart
을 시도했습니다)
apache2ctl restart
를 실행하려는 경우 그래서 제 질문은, 기본적으로
, 이? 나는 스크립트에 암호를 저장할 의도가 없다.
편집 :
내가 모두 문자열로 명령을 전달 시도리스트로 토큰 화했습니다. 파이썬 인터프리터에서는 문자열을 사용하여 패스워드 프롬프트를 제대로 볼 수 있습니다 (원래의 문제처럼 파이썬 스크립트에서 여전히 작동하지 않습니다). 목록은 sudo에 대한 도움말 화면을 제공합니다.
편집 2 : 그래서
는 내가 수집는 popen 그냥 문자열로 몇 가지 명령을 작동하지만 쉘은 = 사실, 그것은 sudo를 얻을 '= 진정한 쉘'없이
proc = subprocess.Popen(['sudo','/usr/sbin/apache2ctl','restart'])
를 취한다 때이다 일하다.
감사합니다. 그것은 목록을 기대
cmd = ['sudo', 'apache2ctl', 'restart']
proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
:
이 사용자가 암호를 요구하지 않고이 명령을 실행할 수 있도록 sudo를 구성하는 방법은 어떻습니까? –
당신이하고있는 일에 따라 ['proc.wait()'] (https://docs.python.org/2/library/subprocess.html#subprocess.Popen.wait)를 사용하는 것이 좋습니다. 'wait'는 자식 프로세스가 실행을 마칠 때까지 진행되지 않습니다. – craymichael