使用python打开cmd并自动输入密码
我已经设法让python打开cmd。但是,在执行cmd.exe之前,使用runas administrator会进行密码检查 我用这个打开cmd使用python打开cmd并自动输入密码,python,cmd,subprocess,administrator,runas,Python,Cmd,Subprocess,Administrator,Runas,我已经设法让python打开cmd。但是,在执行cmd.exe之前,使用runas administrator会进行密码检查 我用这个打开cmd 导入子流程 subprocess.call([“runas”、“/user:Administrator”、“cmd.exe”) 我正在寻找一种方法,可以在运行代码时打开的runas.exe提示符中自动输入密码。假设我要创建var=“test”并将其添加到import subprocess之后,我将如何使其成为runas.exe的输入变量 该解决方案只需
导入子流程
subprocess.call([“runas”、“/user:Administrator”、“cmd.exe”)
我正在寻找一种方法,可以在运行代码时打开的runas.exe提示符中自动输入密码。假设我要创建var=“test”
并将其添加到import subprocess
之后,我将如何使其成为runas.exe的输入变量
该解决方案只需要3.4版或更高版本的python模块
更新 我发现一些代码似乎可以直接输入runas.exe。然而,当在代码中输入应该是
测试时,明显的输入是\x00\r\n
,我相当确定,如果我可以将输入设置为测试
,那么代码将成功
代码如下:
import subprocess
args = ['runas', '/user:Administrator', 'cmd.exe']
proc = subprocess.Popen(args,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
proc.stdin.write(b'test\n')
proc.stdin.flush()
stdout, stderr = proc.communicate()
print (stdout)
print (stderr)
这段代码实际上可以工作(在Windows2008服务器上测试)。我用它为不同的用户调用runas
,并传递他的密码。新的命令提示符以新的用户上下文打开,无需输入密码
请注意,您必须安装pywin32
才能访问win32 API
这个想法是:
- 到
Popen
使用runas
命令,无需任何输入重定向,即可重定向输出
- 逐字符读取,直到遇到“:”(密码提示的最后一个字符)
- 使用
win32
软件包将密钥事件发送到控制台,最后的\r
结束密码输入
(改编自):
虽然这不是你问题的答案,但可以解决你的问题。使用而不是runas。您可以这样运行它:
psexec -u user -p password cmd
(或者使用subprocess.Popen
或其他工具从Python运行它)我正在尝试做与mate ExoticScarf相同的事情。
复制代码
`
添加universal\u newlines=True似乎它可以像str一样写入过程,而不像bytes那样写入对象。您可以使用pexpect模块;密码加密如果需要,你需要小心。@Jean-Françoisfare你提到的另一个问题是6岁,在此期间没有活动,给出的答案不适用于我的情况。你是对的。但它没有答案,可能是因为不可能使用纯python。。。有人想回答这个问题吗?我会重新打开的。注意:是完全相同的,但答案很差。重新开放。“如果你觉得不对,其他人可以随意关闭。”让·弗朗索瓦·法布说。但是,python应该可以与正在运行的应用程序交互。我希望找到一种方法,在这样的应用程序中获取变量并将其作为输入读取,或者将shell输出解释为应用程序的输入。如果python不允许这种交互,我会感到惊讶。我遇到了一个关于前缀为win32的模块的代码错误:ModuleNotFoundError:没有名为“win32 Console”的模块。
我以前曾尝试使用这些模块在多台机器上打开cmd,每次都会收到相同的错误。即使在安装之后,我仍然会收到相同的python error2版本吗?尝试打印(sys.executable)
并查看它是否是您期望的版本。这是我期望的版本。但是,我不再收到错误。一个名为pythonw.exe的dir的窗口正在打开,我无法以任何方式与该窗口交互,它肯定不是一个cmd窗口。我已经编辑了以“cmd.exe”(以防cmd是您系统中的其他内容)更改“cmd”)@Jean Françoisfare,但它没有回答问题,应该是一个注释。您回答了这个问题,这通常是使用坚持从控制台读取的命令的问题。@eryksun:true(谢谢:)),但是如果OP的目标是成为另一个人而不需要任何键入,这是可行的(还需要第三方软件)。@Jean Françoisfare使用psexec解决OP的特定问题会很好,但它没有回答所问的问题。一条评论可以提出解决整个问题的另一种方法,OP可以提出一个新问题,这是最好的答案。一般来说,我们需要明确、具体的问题和具体的答案,这样人们就可以更容易地找到问题的答案,而不必通过大量的误报或分散在几个问题上的信息进行筛选。@eryksun你已经说明了你的观点。如果答案指定“作为一种解决方法”,那就更好了,但我仍然认为,在一个不存在的页面上推荐一个Windows过时的命令行工具(SANUR)来完成这项工作比2次投票要好。因此,这些年来质量一直在提高:)@Jean-Françoisfare,我看到你对与这个问题相关的老问题的评论。我认为你应该在这里添加你的答案,并对旧的被接受的答案进行评论,以突出一个可行的替代方案。然后结束这个问题。这将使你的贡献对来自谷歌和其他搜索引擎的用户更加明显。
psexec -u user -p password cmd
args=(["runas.exe", "/user:admin", "program.exe"])
proc = subprocess.Popen(args,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True)
passw='password'
proc.stdin.write(passw)
proc.stdin.flush()
stdout, stderr = proc.communicate()
print (stdout)
print (stderr)`