gpt4 book ai didi

python - pexpect,期望'$'时脚本超时

转载 作者:行者123 更新时间:2023-12-02 04:41:57 26 4
gpt4 key购买 nike

我正在使用pexpect命令学习python,试图将usign ssh脚本编写到多个服务器并运行远程安装,但是当脚本运行到child.expect('$')时,它超时了,并且没有执行后续任务,可以看看有什么问题吗?

这是代码

#!/usr/bin/python
import pexpect
import getpass
import pdb

user = raw_input("what is username:")
paswd =getpass.getpass("Please enter your password: ")
seNam = raw_input("Server name:")

child = pexpect.spawn('ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PreferredAuthentications=\"password\" "' + user + "@" + seNam)
child.logfile = sys.stdout
child.expect('password:')
child.sendline(paswd)
child.expect('$')
child.sendline("ls -l")
child.expect('$')
child.sendline("exit")

raw_input("please press enter to continue...")

这是我从pdb得到的错误messgag
Traceback (most recent call last):

File "./expecTest.py", line 23, in <module>
child.expect('$')

File "/usr/lib/python2.6/site-packages/pexpect.py", line 1311, in expect
return self.expect_list(compiled_pattern_list, timeout, searchwindowsize)

File "/usr/lib/python2.6/site-packages/pexpect.py", line 1325, in expect_list
return self.expect_loop(searcher_re(pattern_list), timeout, searchwindowsize)

File "/usr/lib/python2.6/site-packages/pexpect.py", line 1409, in expect_loop
raise TIMEOUT (str(e) + '\n' + str(self))

pexpect.TIMEOUT:在read_nonblocking()中超出了超时。

谢谢!

最佳答案

我本人只是遇到了这个问题,@ jfs的评论为我节省了很多调试时间。

问题是对child.expect('$')的调用。因为pexpect默认使用正则表达式匹配,并且因为$是正则表达式中的“行尾”元字符,所以它期望在此处找到行尾而不是文字$

解决方案是转义符号:\$,或使用匹配字符串文字而不是正则表达式的child.expect_exact('$')

注意:如果@jfs发布了答案,我很乐意接受我的帮助,以便他们获得所有功劳。

关于python - pexpect,期望'$'时脚本超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36637303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com