使该代码与pexpect模块一起使用几乎不需要帮助。

该代码通过登录到服务器执行git pull,然后下载最新代码(如果可以升级),或者仅发送一条消息“已经是最新的”。

该代码实际上识别了密码屏幕,但没有标识文本“已经是最新的”

不知道我是否在这里错过任何东西。

该代码的一个片段是:

        p = pexpect.spawn('git pull',cwd = comp_dir,maxread = 10000, timeout = 100)
        i = p.expect(['password:','Already up-to-date.',pexpect.EOF])
        if i == 0:
            output_lines = p.before
            output_line_list = output_lines.split('\r\n')
            for line in output_line_list: print line
            count = 0
            p.sendline(pwd)
            while count < 3:  **# The server in case of unsuccessful login asks for password thrice so this check...  (not sure if there is a better way of achieving this)**
                try:
                    output = p.expect('Permission denied')
                    count+=1
                    p.sendline(pwd)
                    p.logfile = sys.stdout
                except:
                    print 'Successful Login !!!! ------'
                    p.expect('Already up-to-date',timeout=None)
                    count = 3
        if i == 1:
            output_lines = p.before
            output_line_list = output_lines.split('\r\n')
            for line in output_line_list: print line
            p.expect(pexpect.EOF)


任何帮助是极大的赞赏。

谢谢,
-维杰

最佳答案

这种逻辑似乎有点不正确。

首先:您会从一系列提示中得到期望

i = p.expect(['password:','Already up-to-date.',pexpect.EOF])


首先发送正确的密码提示。然后,即使您收到提示-“已经是最新的”。

您已更改pexpect以检查“密码被拒绝”

output = p.expect('Permission denied')


我认为任何一点都只有预期行之一处于活动状态。同样,在出现提示后您无法设置期望。

您必须更改脚本才能按顺序检查预期的行

i = p.expect(['password:','Already up-to-date.','Permission denied', pexpect.EOF])
if i == 0:
   .... send password
   i = p.expect(['password:','Already up-to-date.','Permission denied', pexpect.EOF])
if i == 2:
   .... send password
   i = p.expect(['password:','Already up-to-date.','Permission denied', pexpect.EOF])
if i == 1:
   .... print "already updated"
   i = p.expect(['password:','Already up-to-date.','Permission denied', pexpect.EOF])
if i == 3:
   .... print output


基本上,您在任何时候都只有一个活动的Expect命令处于活动状态。如果您期望行“ xyz”并且它收到“ 123”。它将等待“ xyz”而超时。

关于python - 与pexpect互动所需的帮助很少,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11296426/

10-16 19:10