我有一个库函数,可以启动通用后台进程并记录它。
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)
主要问题:是否可以修改此函数,以便在关闭日志文件时,如果它是空的是自动删除的吗?
Note:我想要一个解决方案,我可以调用这个函数并忘记它。我不想每次工作结束后都必须记住调用清理函数。
(被拒绝?)想法:我可以用threading
启动一个单独的线程来监视进程和/或日志文件,但这似乎比必要的更复杂。
Note:必须在 Python 2.7 中工作,但我也对 Python 3 解决方案感兴趣,如果它更简单的话。
尝试颠倒这个概念,仅在准备好写入时才创建文件。创建您自己的类来处理文件对象:
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
语句变成这样:
with MyFile(logfile) as log:
提议但被拒绝的来自 supergra 的编辑手动合并
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)