[英]Permission Denied error while downloading file from Dropbox in Python
[英]Permission Denied sometimes when downloading executable file
因此,我正在编写一个脚本来下载文件,如果没有完成,请从停止的位置重新开始下载。 那部分已经照顾好了。
我将所有这些部分都取出来,以仅显示不起作用的部分。 我刚刚在这里制作了亚马逊网址,因此如果您运行该网址,它实际上不会下载任何内容,但是用实际的下载链接替换该网址将是:
import urllib
import time
import os
file_name = "setup.exe"
web_page = urllib.FancyURLopener().open("https://s3.amazonaws.com/some_bucket/files/"+file_name)
while True:
data = web_page.read(8192)
if not data:
print "done"
break
#print os.getcwd()
with open(file_name, "ab") as outputFile:
outputFile.write(data)
#print "going..."
#time.sleep(1)
发生了什么(仅在尝试下载EXE文件时才发生此情况),该进程将从web_page读取看似随机的次数(1到20ish之间),然后抛出IOError:13,权限被拒绝。 同样,使用.gif或.mov或我测试过的其他一些东西,永远不会抛出拒绝权限错误。
此外,取消注释time.sleep(1)行可解决此问题。 好像with语句在继续之前没有完全关闭文件。
我认为with语句应该处理关闭,不是吗?
我还认为也许我的当前目录已被更改,但是不加注释却永远不会显示它(尽管按照相同的逻辑,它不一定必须如此)。
(还很奇怪的是,如果我在桌面上运行此脚本(以便它也可以写入桌面)并在其前面打开了Aptana,则不会发生权限被拒绝的错误,但是第二次我将文本编辑器最小化为将焦点放在桌面上会引发错误-我将其归因于Aptana在打开时占用了大量资源,因此减慢了其他过程的速度,有点像time.sleep?)
非常感谢您的任何指点。
我不明白您为什么要为每次读取的网络重新打开和关闭文件而麻烦。 正如Pavel建议的那样,这可能使病毒扫描程序有机会打开(并锁定?)文件进行扫描。 为什么不只打开一次,完成所有I / O,然后关闭呢? (我想这可能与您省略的代码有关。)
代替:
while True:
data = web_page.read(8192)
if not data:
print "done"
break
with open(file_name, "ab") as outputFile:
outputFile.write(data)
尝试:
with open(file_name, "ab") as outputFile:
while True:
data = web_page.read(8192)
if not data:
print "done"
break
outputFile.write(data)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.