게 python 암호를 입력하면 실행하 csh 스크립트
문제
쓰 python 스크립트를 실행하는 csh 스크립트에서 Solaris10.Csh 스크립트를 사용자를 위한 루트 비밀번호(나도 알아요)하지만 나는 확실하지 않을 만드는 방법 python 스크립트 프롬프트에 응답으로 암호입니다.이것이 가능한가요?여기에 내가 무엇을 사용하여 실행 csh 스크립트:
import commands
commands.getoutput('server stop')
해결책
살펴보십시오 pexpect 기준 치수. 대화식 프로그램을 다루도록 설계되었습니다.
아, 그리고 쉘 또는 파이썬 스크립트에서 하드 코딩 루트의 비밀번호가 잠재적으로 보안 구멍이라는 것을 기억하십시오 : D
다른 팁
사용 하위 프로세스. Popen ()에 전화하여 프로세스를 작성하고 Communicate ()를 사용하여 텍스트를 보내십시오. 죄송합니다. 파이프 포함을 잊었습니다 ..
from subprocess import Popen, PIPE
proc = Popen(['server', 'stop'], stdin=PIPE)
proc.communicate('password')
비밀번호를 피하고 Sudo 및 Sudoers와 같은 체계를 시도하는 것이 좋습니다. 다른 곳에서 언급 된 Pexpect는 표준 라이브러리의 일부가 아닙니다.
import pexpect
child = pexpect.spawn('server stop')
child.expect_exact('Password:')
child.sendline('password')
print "Stopping the servers..."
index = child.expect_exact(['Server processes successfully stopped.', 'Server is not running...'], 60)
child.expect(pexpect.EOF)
트릭을 했어요! Pexpect 규칙!
추가하다 input=
안에 proc.communicate()
표준 lib를 사용하는 사람들을 위해 실행하십시오.
from subprocess import Popen, PIPE
proc = Popen(['server', 'stop'], stdin=PIPE)
proc.communicate(input='password')
매개 변수로 전달할 수 있어야합니다. 같은 것 :
commands.getoutput('server stop -p password')
이것은 더 잘 작동하는 것 같습니다.
import popen2
(stdout, stdin) = popen2.popen2('server stop')
stdin.write("password")
그러나 아직 100%가 아닙니다. "비밀번호"가 올바른 비밀번호이지만 여전히 SU를 받고 있습니다. SU를 루팅하려고 할 때 CSH 스크립트에서 죄송합니다.
하는 것을 피하기 위해 대답하는 암호문에서는 python 스크립트에 나가서 스크립트를 실행합니다.이 질문은 여전히 대답 하지만 나는 그냥 그것은 이 방법이다.