| # Temporary file name allocation | 
 | # | 
 | # XXX This tries to be not UNIX specific, but I don't know beans about | 
 | # how to choose a temp directory or filename on MS-DOS or other | 
 | # systems so it may have to be changed... | 
 |  | 
 |  | 
 | import os | 
 |  | 
 |  | 
 | # Parameters that the caller may set to override the defaults | 
 |  | 
 | tempdir = None | 
 | template = None | 
 |  | 
 |  | 
 | # Function to calculate the directory to use | 
 |  | 
 | def gettempdir(): | 
 | 	global tempdir | 
 | 	if tempdir == None: | 
 | 		try: | 
 | 			tempdir = os.environ['TMPDIR'] | 
 | 		except (KeyError, AttributeError): | 
 | 			if os.name == 'posix': | 
 | 				tempdir = '/usr/tmp' # XXX Why not /tmp? | 
 | 			else: | 
 | 				tempdir = os.getcwd() # XXX Is this OK? | 
 | 	return tempdir | 
 |  | 
 |  | 
 | # Function to calculate a prefix of the filename to use | 
 |  | 
 | def gettempprefix(): | 
 | 	global template | 
 | 	if template == None: | 
 | 		if os.name == 'posix': | 
 | 			template = '@' + `os.getpid()` + '.' | 
 | 		else: | 
 | 			template = 'tmp' # XXX might choose a better one | 
 | 	return template | 
 |  | 
 |  | 
 | # Counter for generating unique names | 
 |  | 
 | counter = 0 | 
 |  | 
 |  | 
 | # User-callable function to return a unique temporary file name | 
 |  | 
 | def mktemp(): | 
 | 	global counter | 
 | 	dir = gettempdir() | 
 | 	pre = gettempprefix() | 
 | 	while 1: | 
 | 		counter = counter + 1 | 
 | 		file = os.path.join(dir, pre + `counter`) | 
 | 		if not os.path.exists(file): | 
 | 			return file |