Python 如何使用pexpect模块将输出写入文件和标准输出

Python 如何使用pexpect模块将输出写入文件和标准输出,python,pexpect,Python,Pexpect,我是python的新手,一直在阅读和上网以完成我的任务 我正在编写一个函数,它将对我的设备执行ssh,执行一些命令,并在终端和日志文件中显示结果 我写过这样的东西: class logger(object): def __init__(self, filename="Default.log"): print 'Inside Logger Class' self.terminal = sys.stdout self.log = open(

我是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() 
类记录器(对象):
def uuu init uuu(self,filename=“Default.log”):
打印“内部记录器类”
self.terminal=sys.stdout
self.log=打开(文件名为“a”)
类simpleTelnet(记录器):
定义初始化(自):
打印“内部simpleTelnt构造函数”
logger.\uuuuu init\uuuuuuu(self,“myfilename.txt”)
self.log.write='写入日志文件'
def telnetSession(自):
p=pexpect.spawn('ssh admin@'))
p、 日志文件=sys.stdout
p、 expect('密码:')
p、 sendline('密码')
时间。睡眠(2)
p、 sendline('显示版本|不再')
expect(pexpect.EOF,超时=无)
out=p.在()之前
self.log.write(p.logfile)
p、 关闭()
返回
如果名称=“\uuuuu main\uuuuuuuu”:
输出=simpleTelnet()
cmd=output.telnetSession()

在这里,我尝试登录到一个设备,在标准输出和写入文件上打印输出。我可以打印stdout并记录到文件中,但在执行命令后,尽管我使用p.close()关闭了spawn类,但它不会关闭并结束脚本执行。该计划将永远停留在那里。执行这些命令后如何关闭程序。

.write
是一种方法,而不是属性,因此您应该执行
变量。write(“任何您想要的”)
而不是'variable.write=“任何您想要的”。如果不调用函数,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行正确的语法。在发布问题之前,您必须修改代码。下次试着这样做。

你真的读过回溯,并努力去理解它吗?它简单而准确地告诉你做错了什么。此外,在错误发生的那一行上方的六行几乎是一行,演示了如何正确处理错误。。明白了。我应该用self.log.write(‘写入文件’)来代替。这是有效的,这是完全错误的。该错误与文件权限无关。@EKHUMO您确定吗?您可以轻松地自己读取回溯,并查看真正的错误是什么。我可以这样做来写入文件吗?self.log.write(p.logfile)sorry@user596922?我不明白。如果你用我的正确代码替换你的错误代码,你的代码就会工作。