2017-12-01 19 views
0

を拒否されたが、私はそうのようなディレクトリを作成します。 そうPythonのos.makedirsとshutil.copyfile - - エラー13許可が私のコードでは

# Copy FFMPEG files into that folder so youtube dl can download the videos as audio tracks 
# Tried using os.getcwd() to get full path, same error 
shutil.copyfile(os.getcwd() + '\\ffmpeg.exe', os.getcwd() + "\\" + playlist_name) 
shutil.copyfile('ffplay.exe', "/" + playlist_name + "/") 
shutil.copyfile('ffprobe.exe', "/" + playlist_name + "/") 

しかし、それらのファイルをコピーしようとすると、このエラーがスローされますようにそれから私は、フォルダを新たに作成したディレクトリに配置され、元のディレクトリから3つのファイルをコピーしたい:

PermissionError: [Errno 13] Permission denied: 'C:\\Users\\ME\\Documents\\python\\DIRECTORY\\PLAYLIST_NAME_HERE' 

私は同じエラーでさまざまなシャッターコピー方法を試しました。

EDIT:これは、Windows

the copyfile docsパー
+0

このエラーは、問題が何であるかを示しています。スクリプトを実行しているアカウント(おそらくあなたのユーザー)に権限があることを確認してください。 – user1767754

+0

@ user1767754: "書き込み権限がありますか"という古典的なモデルでは、実際にはアクセス許可エラーではありません。 Windowsはファイルを使ってディレクトリを上書きしようとするときや、ファイルであるかのように書き込みのためにディレクトリを開くときに、このエラーコード(または他の場合は 'EPERM'を使いますが、それでもPythonの' PermissionError')を使います。あなたがそれを「許可」していないからです。 'EISDIR'(Python' IsADirectoryError')はあなたが期待しているものですが、Windowsでは 'EACCES' /' EPERM'を使用しています。 – ShadowRanger

答えて

1

上で実行されている:

dst must be the complete target file name; look at shutil.copy() for a copy that accepts a target directory path.

あなたはソースファイルとターゲットディレクトリを命名して持つ、シェルであなたが何を行うには、それを使用することはできませんそれは、ファイルが元のファイル名でディレクトリに置かれるべきであることを推測します。ターゲットファイルの名前を明示的に指定するか、ディレクトリと同じ名前にコピーしようとしていると思うし、ファイルを置き換えるのとは異なり、明示的にディレクトリの名前を変更したり、最初にディレクトリツリー全体。修正するには、単に送信元と宛先の両方にファイル名を繰り返していることを確認してください:

for filename in ('ffmpeg.exe', 'ffplay.exe', 'ffprobe.exe'): 
    shutil.copyfile(filename, os.path.join(playlist_name, filename)) 

これらのシステムは、Pythonを引き起こし、EISDIRでアクションを拒否しているため問題は、UNIXライクなシステムの詳細は明らかであろうIsADirectoryErrorが呼び出されるが、何らかの理由でWindowsがアクセス許可の問題(EACCESとそれに関連するWindows固有のエラーコード)に関連するより一般的なエラーコードを使用することを選択した場合、PythonはPermissionErrorに変換する(Windowsは実際の問題、実際の問題がディレクトリをファイルとして使用して例外タイプを修正しようとしていたかどうかをPythonがチェックしようとすると、あらゆる種類の競合状態が発生します。

+1

'NtCreateFile'システムコールは' STATUS_FILE_IS_A_DIRECTORY'を返します。問題は、Windowsがこのステータス値を古代からのレガシー動作(16ビットWindows)であるエラーコード 'ERROR_ACCESS_DENIED'にマップすることです。スレッドの最後のNTステータス値の保持を明示的に保証していれば、Pythonは 'RtlGetLastNtStatus'を呼び出してこのケースでは' IsADirectoryError'を発生させることができます。 – eryksun

+0

私は今どこが間違っていたのかを見て、ディレクトリでファイルを置き換えるのが好きではないという意味になります。ループのためのニース、あまりにも最後の夜遅くなり、私は思考のすべての列車を失った。ありがとう。 – speedcucumber

関連する問題