我正在尝试使用pexpect to 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之后
child=pexpect.spawn('scp -r user@host:route/file .')我在屏幕上看到的是欢迎消息,而不是在文件中,它以"user@host's password:“结束,然后我在同一行中看到了密码,但我仍然没有得到文件。
有人知道怎么修吗?
谢谢大家!
发布于 2014-04-15 23:26:28
您可以查看pexpect的属性buffer:- pexpect.before #在匹配pexpect.expect中指定的正则表达式之前解析的字符串- pexpect.buffer #当前在缓冲区中的正则表达式- pexpect.after #匹配pexpect.expect中指定的正则表达式之后解析的字符串
请记住,child.expect()是一个阻塞调用,直到它匹配正则表达式或遇到EOF/TIMEOUT异常时才会返回。
发布于 2019-11-19 20:24:43
给定
()的模式可以是正则表达式,也可以是正则表达式列表。这允许您匹配多个可选响应。expect()方法返回匹配模式的索引。例如,假设您想要登录到服务器。输入密码后,您可以从服务器获得各种响应-您的密码可能被拒绝;或者允许您进入并要求输入您的终端类型;或者可以让您直接进入并给出命令提示符。
以及文档中的示例:
child.expect('password:')
child.sendline(my_secret_password)
# We expect any of these three patterns...
i = child.expect (['Permission denied', 'Terminal type', '[#\$] '])
if i==0:
print('Permission denied on host. Can\'t login')
child.kill(0)
elif i==1:
print('Login OK... need to send terminal type.')
child.sendline('vt100')
child.expect('[#\$] ')
elif i==2:
print('Login OK.')
print('Shell command prompt', child.after)https://stackoverflow.com/questions/21645550
复制相似问题