【发布时间】:2012-09-14 13:31:21
【问题描述】:
我正在尝试使用 pexpect 库编写一个 python 脚本。
我想要做的事情如下:
ID = 'User1'
cmdrun = 'A LINUX COMMAND'
sshChild = pexpect.spawn('ssh root@192.168.0.1')
sshOut = file('sshLog.txt','w')
sshChild.logfile = sshOut
sshChild.expect('Last login:*')
sshChild.expect('Please enter your login Id')
sshChild.sendline(ID + '\r')
sshChild.sendline('ssh 192.168.21.1\r')
sshChild.expect('Last login:*')
sshChild.expect('Please enter your login Id')
sshChild.sendline(ID + '\r')
sshChild.sendline(cmdrun + '\r')
一切都按预期工作,直到最后一行,我为 cmdrun 执行 sendline。此命令是自定义 tcpdump 命令,我希望该命令无限期运行,直到我执行 sendctrl('C') 来杀死它,然后逃离 ssh 隧道。
但是,除非我在 sendline(cmdrun + '\r') 之后放置一个 interact(),否则 tcpdump 的输出不会被打印出来。
无论如何我可以在没有交互的情况下做到这一点,因为我不想要交互式终端控制。我想要的是能够等待一段时间,捕获 tcpdump 输出,然后将 tcpdump 与 ssh 隧道一起杀死。
【问题讨论】:
标签: python linux expect pexpect