繁体   English   中英

下载可执行文件时,权限有时会被拒绝

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM