문제

쓰 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 스크립트에 나가서 스크립트를 실행합니다.이 질문은 여전히 대답 하지만 나는 그냥 그것은 이 방법이다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top