def moving_temporary_file(destination): ret = NamedTemporaryFile( prefix=destination.name + '.', dir=destination.up(), ) def finalize(): os.link(ret.name, str(destination)) ret.finalize = finalize return ret