Python Pexpect完整输出未保存(如何处理“--More--”提示?)

时间:2018-01-10 15:07:42

标签: python python-2.7 stdout pexpect

我正在使用Pexpect在服务器上远程运行命令并将输出保存在文件中。但是,它不会保存整个输出,因为它会因--More--而被截断。有没有办法避免--More--,以便整个输出保存在输出文件中?

我尝试使用child.setwinsize(1000,1000),但它没有解决问题。

当前代码:

import pexpect
import time

child = pexpect.spawn('ssh username@ip_address')
time.sleep(1)

child.sendline('password')
time.sleep(1)

child.logfile = open("output.txt", "w")
child.sendline('command')
child.expect(pexpect.EOF)

print child.before, child.after
child.close

2 个答案:

答案 0 :(得分:1)

不确定您正在运行什么命令但通常可以在看到--More--提示时按 SPACE 。例如:

import pexpect, sys

child = pexpect.spawn('more /etc/services')
child.logfile_read = sys.stdout

patterns = ['--More--', pexpect.EOF]
while True:
    ret = child.expect(patterns)
    if ret == 0:
        child.send(' ')
    elif ret == 1:
        break

答案 1 :(得分:0)

我发现了另一个答案-只需在实际命令之前执行以下命令即可。

Select 
     Country=o.Country
     ,Year= o.Year
     ,Month= o.Month
     ,[Distinct Count]=Count(distinct custid)
     ,Sales= sum(o.Sales) 
From FactOrders O
where 
    o.OrderType in (1,2,3) 
and o.Sales <> 0 and o.Points <> 0    --  because, -10 + 10 = 0
Group by 
   o.Country, o.Year, o.Month

在那之后,假设我输入了诸如terminal length 0 之类的命令。然后,这将显示整个输出。您不需要一次又一次地按Enter键。

show ip interface