2017-11-03 12 views
0

いくつかのファイルを定期的にダウンロードしようとしています。古いファイルを削除して新しいファイルに置き換えようとしています。最初は正常に動作しましたが、2回目にエラーが発生します。ウィンドウ上のpythonのパーミッションエラー

def check_update(): 
    print ('looking for update') 
    shutil.rmtree(config.destination) 
    shutil.os.mkdir(config.destination) 
    threading.Timer(60.0,check_update).start() 

    def get_videos(): 
     response = requests.get(config.api) 
     data = response.json() 
     files = list() 
     l = len(data) 
     for i in range(l): 
      files.append(data[i]['filename']) 
     return files 

    def get_newfiles(myfiles): 
     for i in range(len(myfiles)): 
      url = config.videos+myfiles[i] 
      filename = wget.download(url) 

    def move_files(myfiles): 
     for i in range(len(myfiles)): 
      file = myfiles[i] 
      shutil.move(config.source_files+file,config.destination) 

    def videos(): 
     files = set(get_videos()) 
     myfiles = list(files) 
     get_newfiles(myfiles) 
     move_files(myfiles) 

    videos() 
    print ("files are updated") 
    res = requests.get(config.api) 
    data = res.json() 
    return data 

data = check_update() 

ここがエラーです。

File "C:\Program Files (x86)\Python36-32\lib\threading.py", line 916, in _bootstrap_inner 
    self.run() 
File "C:\Program Files (x86)\Python36-32\lib\threading.py", line 1182, in run 
    self.function(*self.args, **self.kwargs) 
File "tornado.py", line 8, in check_update 
    shutil.rmtree(config.destination) 
File "C:\Program Files (x86)\Python36-32\lib\shutil.py", line 494, in rmtree 
    return _rmtree_unsafe(path, onerror) 
File "C:\Program Files (x86)\Python36-32\lib\shutil.py", line 389, in _rmtree_unsafe 
    onerror(os.unlink, fullname, sys.exc_info()) 
File "C:\Program Files (x86)\Python36-32\lib\shutil.py", line 387, in _rmtree_unsafe 
    os.unlink(fullname) 
permissionError: [WinError 32] The process cannot access the file because it is being used by another process: 

どうすればこの問題を解決できますか?

+0

このプログラムをpowershell(管理者として実行)から実行してみてください。 –

+0

@NiranjRajasekaran:これは初めて実行されて以来のアクセス許可関連ではありません。 – CristiFati

答えて

0

config.destinationディレクトリを削除しようとするとエラーが発生します。これは、ディレクトリ自体または1つ(または複数)の子プロセス(ディレクトリまたはファイルである可能性があります)が別のプロセスで開かれているためです(現在のでもかまいません)。頻繁にこのような状況につながる
典型的なユースケース:

  • CMDコンソールは、そのディレクトリで開いています。ただ、cd DIR外と実行中のプログラムがファイルを例として

    • を開いた
    • 再びそれを削除しようとは メモ帳(または IDE)可能性があるソースファイルをオープンしたことそのdir。
    • しかし、あなたがビデオで作業しているように見えるので、ダウンロードしたファイルがビデオプレーヤーで動作しているかどうかをチェックしたかったかもしれません。私はどのようにwget.download作品知りませんが、それは(がブロックしていない場合:どんなに場合は、そのプログラムを閉じると、問題に

    • を修正するだろうか。これはあなたに固有の

    コードによると、それはそうではないようです)あなたの以前の実行からの1つのビデオがまだダウンロードしているので、それは開いています。 Pythonはプロセスがやるだろうと閉会

注意(それが終了ティル待っているかタスクマネージャからそれを殺すかどうか):原因を検索するときは、ファイルマネージャからディレクトリを削除してみてください(例:Windowsエクスプローラー)、スクリプトによって発生するオーバーヘッドを避けることができます。

+0

問題は解決しましたか? (コンピュータを再起動すると間違いなく解決されるはずですが、少し誇張しすぎているので解決策から除外しました)。 – CristiFati

関連する問題