使用python打开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的输入变量 该解决方案只需

我已经设法让python打开cmd。但是,在执行cmd.exe之前,使用runas administrator会进行密码检查

我用这个打开cmd

导入子流程

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)`