我在哪里更改此 Python 代码片段以将临时文件保存在 tmp 文件夹中?
Posted
技术标签:
【中文标题】我在哪里更改此 Python 代码片段以将临时文件保存在 tmp 文件夹中?【英文标题】:Where do I change this Python code snippet to save the temp file in the tmp-folder? 【发布时间】:2011-08-06 05:22:27 【问题描述】:这是一个实现文件锁定的代码示例,因此应用程序只能打开一个实例。它目前可以工作,但将锁定文件保存在主文件夹(Ubuntu)中。如果应用程序崩溃,锁定文件不会被删除,这是不好的......
我不能轻易看到我应该更改代码以将其保存在 c:/tmp 文件夹中的位置吗?
#!/usr/bin/python
# -*- coding: utf-8 -*-
#implements a lockfile if program already is open
import os
import socket
from fcntl import flock
class flock(object):
'''Class to handle creating and removing (pid) lockfiles'''
# custom exceptions
class FileLockAcquisitionError(Exception): pass
class FileLockReleaseError(Exception): pass
# convenience callables for formatting
addr = lambda self: '%d@%s' % (self.pid, self.host)
fddr = lambda self: '<%s %s>' % (self.path, self.addr())
pddr = lambda self, lock: '<%s %s@%s>' %\
(self.path, lock['pid'], lock['host'])
def __init__(self, path, debug=None):
self.pid = os.getpid()
self.host = socket.gethostname()
self.path = path
self.debug = debug # set this to get status messages
def acquire(self):
'''Acquire a lock, returning self if successful, False otherwise'''
if self.islocked():
if self.debug:
lock = self._readlock()
print 'Previous lock detected: %s' % self.pddr(lock)
return False
try:
fh = open(self.path, 'w')
fh.write(self.addr())
fh.close()
if self.debug:
print 'Acquired lock: %s' % self.fddr()
except:
if os.path.isfile(self.path):
try:
os.unlink(self.path)
except:
pass
raise (self.FileLockAcquisitionError,
'Error acquiring lock: %s' % self.fddr())
return self
def release(self):
'''Release lock, returning self'''
if self.ownlock():
try:
os.unlink(self.path)
if self.debug:
print 'Released lock: %s' % self.fddr()
except:
raise (self.FileLockReleaseError,
'Error releasing lock: %s' % self.fddr())
return self
def _readlock(self):
'''Internal method to read lock info'''
try:
lock =
fh = open(self.path)
data = fh.read().rstrip().split('@')
fh.close()
lock['pid'], lock['host'] = data
return lock
except:
return 'pid': 8**10, 'host': ''
def islocked(self):
'''Check if we already have a lock'''
try:
lock = self._readlock()
os.kill(int(lock['pid']), 0)
return (lock['host'] == self.host)
except:
return False
def ownlock(self):
'''Check if we own the lock'''
lock = self._readlock()
return (self.fddr() == self.pddr(lock))
def __del__(self):
'''Magic method to clean up lock when program exits'''
self.release()
#now testing to see if file is locked = other instance of this program is running already
lock = flock('tmp.lock', True).acquire()
if lock:
print 'doing stuff'
else:
print 'locked!'
exit()
#end of lockfile
【问题讨论】:
你说它是 ubuntu 的,然后又提到c:/
... 它是什么?
【参考方案1】:
使用tempfile
【讨论】:
【参考方案2】:在脚本的结尾:
lock = flock('tmp.lock', True).acquire()
'tmp.lock'
是当前目录中文件的路径。将其更改为您需要的路径,即'c:/tmp-folder/tmp.lock'
。
lock = flock('c:/tmp-folder/tmp.lock', True).acquire()
但是,正如@g19fanatic 所说:您使用的是 Windows ('c:/...') 还是 Linux (Ubuntu) 系统?
【讨论】:
以上是关于我在哪里更改此 Python 代码片段以将临时文件保存在 tmp 文件夹中?的主要内容,如果未能解决你的问题,请参考以下文章
如何将活动 UI 的点击传递到地图片段以将地图更改为 MAP_TYPE_HYBRID