2016-11-28 10 views
1

특정 사용자 모드에서 일부 Windows 응용 프로그램을 실행하려고합니다. 명령을 전달한 후 암호를 묻습니다. 그래서 proc.communicate()를 사용하여 암호를 건네 주면 도움이됩니다.python을 사용하여 명령 프롬프트에서 사용자 이름 뒤에 암호를 보내는 방법

from subprocess import Popen, PIPE 
import time 
cmd = "runas /user:administrator notepad.exe" 
proc = Popen(cmd, stdout=PIPE, stdin=PIPE, stderr=PIPE) 
print proc.stdout.read() 
proc.communicate('password') 
+0

아마도 [이] (http://stackoverflow.com/questions/30238840/run-program-from-command-line-what-prompts-password-and 참조 --automatically-provide-pa? rq = 1) 스레드. 또한 암호 뒤에'\ n'을 보낼 필요가 있을까요? – nbryans

+0

@nbryans에 의해 제안되었지만 행운은 없습니다. – user3872486

+0

['WriteConsoleInput'] (https://msdn.microsoft.com/en-us/library/ms687403)를 사용하여 콘솔 입력 버퍼에 직접 쓸 수 있습니다. 즉,'runas.exe'는 저장된 자격 증명을 사용하는'/ savecred' 옵션을 가지고 있습니다. 처음 암호를 묻는 메시지가 나타납니다. 저장된 자격 증명은 제어판의 자격 관리자에 표시되므로 원칙적으로 ['CredWrite'] (https://msdn.microsoft.com/en-us/library/aa375187)를 통해 추가 할 수 있습니다. 사용자의 볼트에 영구적으로 존재하는 것이 아니라 현재의 로그온 세션에만 적용됩니다. – eryksun

답변

0

대신 Pexpect를 사용하고 있습니까? 네, 다음 사용할 수있는 경우 :

import pexpect 
cmd = "runas /user:administrator notepad.exe" 
child_process = pexpect.spawn(cmd) 
child_process.expect('assword') 
child_process.sendline(password) 
+0

시도해 보셨습니까? Windows의 IIRC pexpect는 파이프를 사용합니다. 그것은 작동하지 않습니다. – eryksun

+0

맞습니다! Expec – ksohi

+0

에서 제공하는 창문을 대체 할 수 있습니다! Windows 용 Pexpect에서 제공하는 대체품이 있습니다. – ksohi