如何使用pexpect模块将输出写入文件和stdout

时间:2014-12-26 16:22:34

标签: python pexpect

我是python的新手,并且一直在阅读和上网以完成我的任务。

我正在编写一个函数,它会对我的设备执行ssh,执行一些命令并在终端和日志文件中显示结果。

我写过这样的话:

class logger(object):
    def __init__(self, filename="Default.log"):
        print 'Inside Logger Class' 
        self.terminal = sys.stdout 
        self.log = open(filename, "a")  

class simpleTelnet(logger):
    def __init__(self):
        print 'Inside simpleTelnt Constructor' 
        logger.__init__(self,"myfilename.txt") 
        self.log.write = 'Writing into the log file' 

    def telnetSession(self):
        p=pexpect.spawn('ssh admin@<ip address>') 
        p.logfile = sys.stdout 
        p.expect('Password:') 
        p.sendline('password') 
        time.sleep(2) 
        p.sendline('show version | no-more') 
        expect(pexpect.EOF, timeout = None) 
        out = p.before()
        self.log.write(p.logfile)
        p.close()
        return out


if __name__ == "__main__": 
    output = simpleTelnet()  
    cmd = output.telnetSession() 

我试图登录设备并在两个stdout上打印输出并写入文件。我能够在stdout中打印并登录到文件但是在执行命令之后,虽然我用p.close()关闭了spawn类,但它并没有关闭并结束脚本执行。该计划永远留在那里。如何在执行这些命令后关闭程序。

1 个答案:

答案 0 :(得分:1)

.write是一个方法,而不是一个属性,所以你应该做variable.write("anything you want")而不是`variable.write =&#34;你想要的任何东西&#34;。如果不调用函数,Python将无法更改内容。

所以不要这样做:

class simpleTelnet(logger):
    def __init__(self):
        print 'Inside simpleTelnt Constructor' 
        logger.__init__(self,"myfilename.txt") 
        self.log.write = 'Writing into the log file

你做:

class simpleTelnet(logger):
    def __init__(self):
        print 'Inside simpleTelnt Constructor' 
        logger.__init__(self,"myfilename.txt") 
        self.log.write('Writing into the log file')

正如其他用户指出的那样,你有相同的代码行,但正确的语法有6行以上。在发布问题之前,您必须修改代码。下次尝试这样做。