2016-11-28 41 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

提供您是對的!有一個由Pexpect提供的替代窗口: – ksohi