【问题标题】:How to send the password after user name in command prompt using python如何使用python在命令提示符中的用户名后发送密码
【发布时间】:2017-04-12 13:04:39
【问题描述】:

试图在特定用户模式下运行某些 Windows 应用程序。通过命令后,它会要求输入密码。所以使用 proc.communicate() 传递密码但它不起作用,请帮助

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

【问题讨论】:

  • 也许见this 线程。另外,也许您需要在密码后发送\n
  • 按照@nbryans 的建议尝试过,但没有运气
  • 您可以使用WriteConsoleInput 直接写入控制台输入缓冲区。也就是说,runas.exe 有一个 /savecred 选项来使用保存的凭据。第一次提示输入密码。保存的凭据列在控制面板的凭据管理器中,因此原则上您可以通过CredWrite 添加它们,这将允许仅在当前登录会话中保留它们,而不是永久保存在用户的保管库中。
  • 为了更清楚一点,我正在尝试使用应用程序中的上述代码打开记事本,但它在记事本未打开的系统下启动(即使它第一次不要求我输入密码。 ) 尝试使用 /savecred,要求输入密码,但没有提示输入
  • 应用是非交互服务会话中SYSTEM账户下运行的服务吗?

标签: python windows python-2.7 subprocess communicate


【解决方案1】:

您愿意改用 Pexpect 吗?如果是,您可以使用以下内容:

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

【讨论】:

  • 你试过了吗? Windows 上的 IIRC pexpect 使用管道。那是行不通的。
  • 你是对的!虽然 Expec 提供了 windows 的替代品
  • 你是对的! Pexpect 为 windows 提供了一个替代品:
  • 用 pexpect 试过,但在 WIndows 中被怀疑,它没有发送密码。相反,它给出了无效的参数错误。任何对 winexpect 有想法的人
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 2016-02-20
  • 1970-01-01
  • 2018-11-15
相关资源
最近更新 更多