2014-01-09 5 views
2

일반 배경 프로세스를 시작하고 기록하는 라이브러리 기능이 있습니다.닫힌 후에 로그 파일이 비어 있으면 삭제하십시오.

def LaunchAndLog(cmd): 
    cmd_args = cmd.split() # Split arguments into array 
    logfile = cmd_args[0] + '.log' 
    with open(logfile,'w') as log: 
     return subprocess.Popen(cmd_args, stdout=log,stderr=log) 

홈페이지 질문 : 로그 파일에 따라 그이 폐쇄되고, 그래서 그것이 자동으로 삭제됩니다 비어있는 경우, 을이 기능을 개정이 가능합니까?

참고 : 나는이 기능을 호출하고 잊어 버릴 수있는 해결책을 원합니다. 작업이 끝난 후 매번 정리 기능을 호출하는 것을 기억하고 싶지 않습니다.

(거부 됨) 아이디어 :threading을 사용하면 프로세스 및/또는 로그 파일을 모니터링하는 별도의 스레드를 실행할 수 있지만 필요 이상으로 복잡해 보입니다.

참고 : : 파이썬 2.7에서 작동해야하지만, 파이썬 3 솔루션에도 관심이 있습니다 (더 간단하다면).

답변

3

개념을 바꾸어 쓰고 준비 할 때만 파일을 만드십시오.

with MyFile(logfile) as log: 

을 제안하지만, 수동으로

+0

아주 좋은 아이디어를 통합 supergra에서 편집을 거부 :

class MyFile(): def __enter__(self): return self def __init__(self, path): ''' store the path, but don't actually open the file ''' self.path = path self.file_object = None def write(self, s): ''' you open the file here, just before writing ''' if not self.file_object: self.file_object = open(self.path, 'w') self.file_object.write(self, s) def close(self): ''' close the file ''' if self.file_object: self.file_object.close() def __exit__(self, exc_type, exc_value, exc_traceback): self.close() 

그런 다음 with 문이됩니다 : 파일 오브젝트를 처리하기 위해 자신의 클래스를 만듭니다 , 그리고 그것을 보는 좋은 방법! – supergra

+0

이것은 작성된대로 작동하지 않습니다. 그것은'__enter__' 함수를 필요로하고'__exit__' 함수는 1이 아닌 4 개의 인수를 받아 들일 필요가 있습니다. 여기에 편집을보십시오 : http://stackoverflow.com/review/suggested-edits/3772114 바보들. – supergra

+0

그 편집으로 완벽하게 작동합니다! – supergra

관련 문제