2013-10-17 3 views
0

내 python 프로그램이 ssh를 통해 메일 로그 데이터를 가져옵니다. 내가열린 파일 오류가있는 Python

with text as f: 
    for line in f: 
     try: 
      .... regex stuff.... 

으로 줄에이 라인을 통해 이동하려고 할 때 다음과 같은 에러가 발생합니다

Traceback (most recent call last): 
    File "xxxxxxxxxxxxxxxxxxxxxxxx", line 90, in <module> 
    start() 
    File "xxxxxxxxxxxxxxxxxxxxxxxx", line 64, in start 
    with text as f: 
AttributeError: __exit__ 

이 작동하지 않는, 나를 위해 일하는 유일한 해결책은 다음과 같다. 텍스트를 파일로 저장하고 다시 엽니 다. 그러나이 파일은 약 1.24MB 크기로 프로그램을 불필요하게 느리게 만듭니다. 누군가 내가 여분의 저축을 어떻게 없앨 수 있는지 알고 있습니까?

.... 
stdin, stdout, stderr = ssh.exec_command('sudo cat /var/log/mailing.log') 
text = ''.join(stdout.readlines()) 
text_file = open('mail.log', 'w') 
text_file.write(text) 
text_file.close() 
ssh.close() 

with open('mail.log') as f: 
    for line in f: 
     try: 
      .... regex stuff.... 
+1

이 '텍스트'가 아닌 컨텍스트 매니저 말할 수 있을까? 원본 코드에서'텍스트 '란 무엇입니까? –

+0

'ssh.exec_command()'의 출처는 어디입니까? –

+0

var 'text'는 'mailing.log'파일의 모든 텍스트입니다. 나는 컨텍스트 관리자의 개념을 이해하지 못했다고 생각한다 .... 'ssh.exec_command()'는 내가 사용하는 모듈 paramiko에서 온 것이다. – gulden

답변

1

text은 데이터가있는 문자열입니다. 너는 열 수 없다. 대신를 여는 당신이해야 그냥

for line in text.splitlines(): 
    try: 
     .... regex stuff.... 
+0

'str.splitlines()'도보세요. –

+0

@MartijnPieters splitlines()를 몰라, 보통 split (os.sep)를 사용합니다. 나는 그것을 지금 바꿨다. 감사! –

+0

고마워, 완벽하게 작동합니다! – gulden

1

당신은 아마 문자열이 파일처럼 다소 보이게 표준 라이브러리에서 StringIO보고 싶을를 통해 루프.

또는, 당신은 왜 당신 같은 취급하려고합니까,

for line in f.split('\n'): 
    try: 
     <regex stuff>