【发布时间】:2013-01-25 02:48:12
【问题描述】:
所以我正在编写一个脚本来下载文件并在下载未完成时从中断处重新开始下载。那部分已经处理好了。
我把所有这些部分都拿出来只显示不起作用的部分。这里的亚马逊网址是我刚编的,所以如果你运行它,它实际上不会下载任何东西,但是用实际的下载链接替换网址,会:
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 到 20 次之间),然后抛出 IOError: 13, Permission denied。同样,对于 .gif 或 .mov,或者我测试过的其他一些东西,永远不会抛出权限被拒绝错误。
此外,取消注释 time.sleep(1) 行可以解决问题。就好像 with 语句在继续之前没有完全关闭文件。
我认为 with 语句应该处理关闭,不是吗?
我还认为也许我的 当前 目录正在以某种方式被更改,但取消注释永远不会显示它(尽管按照相同的逻辑它不一定必须这样做)。
(同样奇怪的是,如果我从桌面运行这个脚本[这样它也写入桌面],并且在它前面打开了 Aptana,就不会发生权限被拒绝错误,但第二次我最小化了文本编辑器聚焦桌面,错误被抛出——我将此归因于 Aptana 在打开时占用了大量资源,因此减慢了其他进程并且有点像 time.sleep??)
非常感谢您的任何指点。
【问题讨论】:
-
可能是防病毒软件搞砸了。
-
在 Windows 上听起来像 UAC,非管理员级别的脚本无法生成需要管理员权限的进程
-
还有
Thanks very much for any pointers.这里有一些0x005556c -
我也是这么想的,但是我找不到要杀死的进程了:P
-
大声笑,谢谢。就 UAC 而言,我是管理员,但这并不一定意味着脚本是管理员级别的吗?
标签: python windows permissions download urllib