gpt4 book ai didi

Python `tempfile.gettempdir()` 不尊重 TMPDIR

转载 作者:行者123 更新时间:2023-12-01 03:57:19 25 4
gpt4 key购买 nike

我正在使用共享 Linux 集群,并且希望我的临时目录为 /tmp/username 而不是默认的 /tmp

根据tempfile docsgettempdir() 应使用$TMPDIR 环境变量来确定临时目录。

然而,事实似乎并非如此?!

$ export TMPDIR='/tmp/username' 
$ python -c "\
import os
import tempfile
print(os.environ['TMPDIR'])
print(tempfile.gettempdir())"
/tmp/username
/tmp

有什么建议吗?

最佳答案

该目录是否存在?用户可写吗?如果没有,它将无法工作,Python 将回退到其他位置。可以看到代码here ,转载于此供引用:

def _get_default_tempdir():
"""Calculate the default directory to use for temporary files.
This routine should be called exactly once.

We determine whether or not a candidate temp dir is usable by
trying to create and write to a file in that directory. If this
is successful, the test file is deleted. To prevent denial of
service, the name of the test file must be randomized."""

namer = _RandomNameSequence()
dirlist = _candidate_tempdir_list()
flags = _text_openflags

for dir in dirlist:
if dir != _os.curdir:
dir = _os.path.normcase(_os.path.abspath(dir))
# Try only a few names per directory.
for seq in xrange(100):
name = namer.next()
filename = _os.path.join(dir, name)
try:
fd = _os.open(filename, flags, 0o600)
try:
try:
with _io.open(fd, 'wb', closefd=False) as fp:
fp.write(b'blat')
finally:
_os.close(fd)
finally:
_os.unlink(filename)
return dir
except (OSError, IOError) as e:
if e.args[0] == _errno.EEXIST:
continue
if (_os.name == 'nt' and e.args[0] == _errno.EACCES and
_os.path.isdir(dir) and _os.access(dir, _os.W_OK)):
# On windows, when a directory with the chosen name already
# exists, EACCES error code is returned instead of EEXIST.
continue
break # no point trying more names in this directory
raise IOError, (_errno.ENOENT,
("No usable temporary directory found in %s" % dirlist))

关于Python `tempfile.gettempdir()` 不尊重 TMPDIR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37229398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com