2014-12-26 8 views
-2

저는 파이썬의 초보자이며 내 작업을 수행하기 위해 그물을 읽고 서핑하고 있습니다.pexpect 모듈을 사용하여 출력을 파일과 stdout에 쓰는 방법

내 장치에 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 [email protected]<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에서 인쇄하고 파일에 로그 할 수 있지만 p.close()를 사용하여 스폰 클래스를 닫지 만 명령을 실행 한 후에는 스크립트 실행을 닫지 않고 종료하지 않습니다. 프로그램은 영원히 거기에 머물러 있습니다. 이 명령을 실행 한 후에 어떻게 프로그램을 닫을 수 있습니까?

+0

실제로 추적 코드를 읽고 이해하려고 노력 했습니까? 그것은 당신이 잘못한 것을 간단하고 정확하게 알려줍니다. 또한 오류가 발생한 행 위의 여섯 행은 올바르게 수행하는 방법을 보여주는 거의 동일한 행입니다. – ekhumoro

+0

oops .. 잡았어. 자기를 사용 했어야했다 .log.write ('파일 쓰기'). 이 작품. – user596922

답변

1

.write은 속성이 아니기 때문에 variable.write("anything you want")을 사용하고 '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)과 같은 줄이 위의 줄. 질문을 게시하기 전에 코드를 수정해야합니다. 다음 번에 그렇게 해보십시오.

+0

이것은 완전히 잘못되었습니다. 이 오류는 파일 권한과 관련이 없습니다. – ekhumoro

+0

@ekhumoro 당신은 그것에 관해 확실합니까? –

+0

직접 추적 코드를 읽고 실제 오류가 무엇인지 확인할 수 있습니다. – ekhumoro