Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 写入我的临时文件的权限被拒绝_Python_Temporary Files - Fatal编程技术网

Python 写入我的临时文件的权限被拒绝

Python 写入我的临时文件的权限被拒绝,python,temporary-files,Python,Temporary Files,我正在尝试使用Python在Windows操作系统上创建并写入临时文件。我使用Python模块tempfile创建了一个临时文件 但是当我去写那个临时文件时,我得到一个错误权限被拒绝。我不能写临时文件吗?!我做错什么了吗?如果我想创建并写入一个临时文件,我应该如何在Python中完成呢?为了安全起见,我想在临时目录中创建一个临时文件,而不是在本地(在.exe正在执行的目录中) IOError:[Errno 13]权限被拒绝:“c:\\users\\blah~1\\appdata\\local\\

我正在尝试使用Python在Windows操作系统上创建并写入临时文件。我使用Python模块
tempfile
创建了一个临时文件

但是当我去写那个临时文件时,我得到一个错误
权限被拒绝
。我不能写临时文件吗?!我做错什么了吗?如果我想创建并写入一个临时文件,我应该如何在Python中完成呢?为了安全起见,我想在临时目录中创建一个临时文件,而不是在本地(在.exe正在执行的目录中)

IOError:[Errno 13]权限被拒绝:“c:\\users\\blah~1\\appdata\\local\\temp\\tmpiwz8qw”

temp = tempfile.NamedTemporaryFile().name
f = open(temp, 'w') # error occurs on this line

NamedTemporaryFile
实际上是为您创建并打开文件,您无需再次打开文件进行编写。事实上,国家:

在命名的临时文件仍处于打开状态时,该名称是否可用于再次打开该文件因平台而异(在Unix上可以使用该名称;在Windows NT或更高版本上不能使用该名称)

这就是为什么你会得到你的许可错误。您可能想要的是:

f = tempfile.NamedTemporaryFile(mode='w') # open file
temp = f.name                             # get name (if needed)

NamedTemporaryFile
实际上是为您创建并打开文件,您无需再次打开文件进行编写。事实上,国家:

在命名的临时文件仍处于打开状态时,该名称是否可用于再次打开该文件因平台而异(在Unix上可以使用该名称;在Windows NT或更高版本上不能使用该名称)

这就是为什么你会得到你的许可错误。您可能想要的是:

f = tempfile.NamedTemporaryFile(mode='w') # open file
temp = f.name                             # get name (if needed)

使用删除参数,如下所示:

tmpf = NamedTemporaryFile(delete=False)
但是,一旦处理完临时文件,就需要手动删除它

tmpf.close()
os.unlink(tmpf.name)
错误参考:

问候,,
Vidyesh使用删除参数,如下所示:

tmpf = NamedTemporaryFile(delete=False)
但是,一旦处理完临时文件,就需要手动删除它

tmpf.close()
os.unlink(tmpf.name)
错误参考:

问候,,
Vidyesh

权限被拒绝,因为该文件在代码第2行打开


先用f.close()关闭它,然后就可以开始在tempfile上写了

权限被拒绝,因为该文件在代码的第2行被打开


首先用f.close()关闭它,然后就可以开始在tempfile上写东西了

考虑改用
os.path.join(tempfile.gettempdir()、os.uradom(24.hex())
。它是可靠的、跨平台的,唯一需要注意的是,它不适用于胖分区


NamedTemporaryFile有许多问题,其中最重要的问题是它可能因为权限错误而无法创建文件,无法检测到权限错误,然后循环数百万次,从而挂起程序和文件系统。

考虑使用
os.path.join(tempfile.gettempdir(),os.uradom(24.hex())
。它是可靠的、跨平台的,唯一需要注意的是,它不适用于胖分区


NamedTemporaryFile有许多问题,其中最重要的一个问题是,它可能因为权限错误而无法创建文件,无法检测到权限错误,然后循环数百万次,从而挂起程序和文件系统。

以下命名临时文件的自定义实现已在上展开:


已在上展开命名临时文件的以下自定义实现:


这个问题可能比你们许多人想象的更复杂。无论如何,这是我的解决方案:

  • 使用atexit模块
  • 使
    NamedTemporaryFile
    delete=False
  • 注册
    delete_文件
    作为清理功能

  • 这个问题可能比你们许多人想象的更复杂。无论如何,这是我的解决方案:

  • 使用atexit模块
  • 使
    NamedTemporaryFile
    delete=False
  • 注册
    delete_文件
    作为清理功能

  • 这篇文章中有一个有用的澄清和进一步的信息这篇文章中有一个有用的澄清和进一步的信息非常感谢。我使用pysmb从文件共享服务器加载文件,当使用tempfile.NamedTemporaryFile()时,somefile只会获取空内容。通过切换到打开(文件名为“wb”)作为fp。问题解决了,非常感谢。我使用pysmb从文件共享服务器加载文件,当使用tempfile.NamedTemporaryFile()时,somefile只会获取空内容。通过切换到打开(文件名为“wb”)作为fp。问题解决了。
    atexit.register(delete_files, temp_files)