そのため、ファイルをダウンロードし、ダウンロードが完了しない場合は中断したところからダウンロードを再開するスクリプトを作成しています。その部分はお世話になっています。
機能しない部分だけを表示するために、これらのパーツをすべて取り出しました。ここにある amazon の URL は私が作成したばかりなので、これを実行しても実際には何もダウンロードされませんが、URL を実際のダウンロード リンクに置き換えると、次のようになります。
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 をその前に開いた場合、アクセス許可拒否エラーは発生しませんが、2 番目にテキスト エディターを最小化してデスクトップにフォーカスすると、エラーがスローされます-これは、Aptana が開いている間に多くのリソースを消費するため、他のプロセスが遅くなり、time.sleep のようなものになるためだと思います??)
ご指摘ありがとうございます。