这段代码实际上可以工作(在Windows2008服务器上测试)。我用它为另一个用户调用runas,并传递他的密码。使用新用户上下文打开的新命令提示,无需输入密码。
请注意,您必须安装pywin32才能访问win32 API。
想法是:对于Popen命令,在没有任何输入重定向的情况下,重定向输出
逐字符读取,直到遇到“:”(密码提示的最后一个字符)。
使用win32包将密钥事件发送到控制台,最后使用\r结束密码输入。import win32console, win32con, time
import subprocess
username = "me"
domain = "my_domain"
password ="xxx"
free_console=True
try:
win32console.AllocConsole()
except win32console.error as exc:
if exc.winerror!=5:
raise
## only free console if one was created successfully
free_console=False
stdin=win32console.GetStdHandle(win32console.STD_INPUT_HANDLE)
p = subprocess.Popen(["runas",r"/user:{}\{}".format(domain,username),"cmd.exe"],stdout=subprocess.PIPE)
whil