我开始使用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
答案 0 :(得分:2)
su
时拒绝运行:
$ echo blah | su su: must be run from a terminal
答案 1 :(得分:0)
IMO,当pexpect就是答案时,你问的是错误的问题。
在这种情况下,您可以更有效地使用sudo。它可以配置为在特定用户调用时以root身份运行,而无需密码。
答案 2 :(得分:0)
根据文档,当您将字符串传递给expect_exact()时,它会在匹配时返回0,而不是1.
您是否尝试将i与0进行比较?
答案 3 :(得分:0)
首先你登录超级用户使用这个评论,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('密码:'),这个密码期望照顾pxssh模块看到这个链接Python: How can remote from my local pc to remoteA to remoteb to remote c using Paramiko和How to login the super user(root) in remote host system using pexpect?