1

使此代码与 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)

任何帮助是极大的赞赏。

谢谢,-维杰

4

1 回答 1

1

这个逻辑似乎有点不对。

起初:你期待一组提示

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

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

于 2012-07-02T16:06:47.900 回答