【问题标题】:password expect expression isn't getting matched密码期望表达式不匹配
【发布时间】:2013-04-25 14:53:29
【问题描述】:

我开始使用 Pexpect 库,但由于某种原因,我在获取匹配的表达式时遇到了问题。

例如在下面的代码中

   import pexpect

   child=pexpect.spawn('su')
   i=child.expect_exact('Password:')
   print "value of i is %d" %i
   if i==1:
          p=input("Please enter root password : ")
          child.sendline(p)
          child.sendline('echo piggy')

问题 我从不等于 1

【问题讨论】:

  • 也许su 没有终端就无法工作?
  • 有任何文件可以支持您的声明吗?
  • 这只是一个想法...我假设您使用其他应用程序对其进行了测试并且有效..是吗? :)
  • 好吧,我没有文件可以证明,所以只是在问。通过其他应用程序,您的意思是直接 posix 调用和模块,如子进程......不。Tbh 要么就是这样,要么我不知道是什么你在问。这个行业的新手一个小时前刚刚了解了 Pexpect。
  • @KarolyHorvath 你是对的。

标签: python unix pexpect


【解决方案1】:

su 在未从终端调用时拒绝运行:

$回声废话|苏 su:必须从终端运行

【讨论】:

  • 绝对不行!好吧,代码是合法的。那么好吧..哦,难道没有办法通过自动 root 进入 root 模式吗?
  • 这也是不可能的。这会导致这样的安全威胁和令人头疼的问题:P
  • @nerorevenge 可以用 sudo 运行脚本吗?
【解决方案2】:

IMO,当 pexpect 是答案时,你问错了问题。

在这种情况下,您可能可以更有效地使用 sudo。它可以配置为在由特定用户调用时以 root 身份运行,而无需输入密码。

【讨论】:

  • 伙计,你能把你打给我的东西弄糊涂吗?
  • 也许这会有所帮助:cyberciti.biz/tips/… 这主要是将正确的咒语放入 /etc/sudoers,然后运行“sudo privileged_command”以确认它以 root 身份运行而无需密码。
【解决方案3】:

根据文档,当您将字符串传递给 expect_exact() 时,它会在匹配时返回 0,而不是 1。

你试过比较 i 和 0 吗?

【讨论】:

  • 您的意思是说您指的是文档中的这一行 如果模式不是列表,则在成功匹配时返回索引 0 ,嗯从来不知道索引 0 的意思零号。
【解决方案4】:

首先你登录超级用户使用这个评论,pxssh 是这个类扩展 pexpect.spawn 专门设置 SSH 连接。这增加了登录、注销和期待 shell 提示的方法。

import pexpect
import pxssh

hostname ='172.16.0.120 -p 2222'
username = 'root'  # must you login in super user add this line
password = 'zilogic'
host = pxssh.pxssh()
host.login (hostname, username, password)
host.logfile = open(logfile, "w")
host.sendline ('whoami') 
print host.before

您将用于 pxssh 模块不需要 child.expect_exact('Password:'),此密码需要注意 pxssh 模块请参阅此链接 Python: How can remote from my local pc to remoteA to remoteb to remote c using ParamikoHow to login the super user(root) in remote host system using pexpect?

【讨论】:

    猜你喜欢
    • 2010-11-22
    • 1970-01-01
    • 2011-07-24
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    相关资源
    最近更新 更多