Python peexpect:期待各种线路

Python peexpect:期待各种线路,python,edit,pexpect,Python,Edit,Pexpect,我试图使用pexpect从服务器创建scp文件,但它似乎没有任何作用(甚至没有错误消息)。这是我的密码: import pexpect child=pexpect.spawn('scp -r user@host:route/file .') child.expect("user@host's password:") child.sendline('password') 我认为问题出在child.expect命令中,因为“user@host's password:“是包含特殊字符的大约30行欢迎

我试图使用pexpect从服务器创建scp文件,但它似乎没有任何作用(甚至没有错误消息)。这是我的密码:

import pexpect
child=pexpect.spawn('scp -r user@host:route/file .')
child.expect("user@host's password:")
child.sendline('password')
我认为问题出在child.expect命令中,因为“user@host's password:“是包含特殊字符的大约30行欢迎信息的最后一行。有没有办法让pexpect期待不止一行或任何简单的东西?或者只是等待X秒,然后输入密码

编辑:它与child.wait()命令一起工作,但在第9个文件处停止。碰巧第10个非常大(大约250Mb),我不知道这是否与它有关。。。谢谢

编辑:我把这行

child.logfile=sys.stdout
之后

我在屏幕上看到的是欢迎信息,而不是在文件中看到的,欢迎信息以“user@host“的密码:”,然后我在同一行中看到了密码,但我仍然无法获取文件

有人知道怎么修吗


谢谢大家

您可以查看pexpect的属性缓冲区: -pexpect.before#在匹配pexpect.expect中指定的正则表达式之前解析的字符串 -pexpect.buffer#当前在缓冲区中的字符串 -pexpect.after#匹配pexpect.expect中指定的正则表达式后解析的字符串

请记住,child.expect()是一个阻塞调用,在匹配正则表达式或遇到EOF/TIMEOUT异常之前不会返回

根据

expect()的模式可以是正则表达式,也可以是正则表达式列表。这允许您匹配多个可选响应。expect()方法返回匹配模式的索引。例如,假设您想要登录到服务器。输入密码后,您可以从服务器获得各种响应–您的密码可能被拒绝;或者你可以被允许进入并询问你的终端类型;或者你可以直接被允许进入并得到一个命令提示

以及文档中的示例:

child.expect('password:'))
child.sendline(我的密码)
#我们期望这三种模式中的任何一种。。。
i=child.expect(['Permission denied'、'Terminal type'、'[\$]]]
如果i==0:
打印('主机上的权限被拒绝。无法登录')
child.kill(0)
elif i==1:
打印('登录确定…需要发送终端类型')
child.sendline('vt100')
child.expect(“[\$]”)
elif i==2:
打印('登录确定')
打印('Shell命令提示符',child.after)

“expect”将一直扫描,直到看到您提供给它的字符串,因此您提供的代码应该可以工作。尝试设置
child.logfile=sys.stdout
以查看发生了什么。尝试在末尾添加
child.wait()
,以等待子进程完成。
child=pexpect.spawn('scp -r user@host:route/file .')