Python 如何使用pexpect模块将输出写入文件和标准输出
我是python的新手,一直在阅读和上网以完成我的任务 我正在编写一个函数,它将对我的设备执行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(
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?我不明白。如果你用我的正确代码替换你的错误代码,你的代码就会工作。