IOError: [Errno 13] Permission denied
を取得していますが、このコードで何が間違っているのかわかりません。
絶対パス(file.asm
のみ)を指定してファイルを読み取ろうとしています。
相対パス(/.../file.asm
を意味します)、指定されたパスにプログラムがファイルを書き込むようにします。絶対パスの場合、現在のディレクトリに書き込む必要があります。それ以外の場合は、指定されたパスに。
コード:
#call to main function
if __== '__main__':
assem(sys.argv[1])
import sys
def assem(myFile):
from myParser import Parser
import code
from symbolTable import SymbolTable
table=SymbolTable()
# max size of each Word
Word_SIZE = 16
# rom address to save to
rom_addrs = 0
# variable address to save to
var_addrs = 16
# new addition
if (myFile[-4:] == ".asm"):
newFile = myFile[:4]+".hack"
output = open(newFile, 'w') <==== ERROR
与えられたエラー:
IOError: [Errno 13] Permission denied: '/Use.hack'
私がコードを実行する方法:
python assembler.py Users/***/Desktop/University/Add.asm
ここで何が間違っていますか?
拡張機能を次のコードに置き換えようとしているようです。
if (myFile[-4:] == ".asm"):
newFile = myFile[:4]+".hack"
ただし、配列のインデックスが混在しているように見えます。以下を試してください:
if (myFile[-4:] == ".asm"):
newFile = myFile[:-4]+".hack"
コードの2行目では、-4
の代わりに4
を使用していることに注意してください。これは、プログラムが/Use.hack
を作成しようとする理由を説明します。これは、最初ファイル名の4文字(/Use
)に.hack
を追加したものです。
書き込みを行う場所で開いているファイルを閉じるだけです。
ルートディレクトリに書き込むための十分な権限がありません。ファイル名の先頭のスラッシュを参照してください?
これは、「shutil.copy」ではなく「shutil.copyfile」を使用していたときに起こりました。権限が台無しになりました。
同じ問題がありました。私の場合、ユーザーには宛先ディレクトリへの書き込み権限がありませんでした。私の場合、次のコマンドが役に立ちました:
chmod 777 University
フォルダーwith open
を開こうとしている可能性があります。一度確認してください。
私にとっては、上から何も機能しませんでした。そこで、この回避策で問題を解決しました。ディレクトリフォルダにSYSTEMを追加したことを確認してください。 somoeneに役立つことを願っています。
import os
# create file
@staticmethod
def create_file(path):
if not os.path.exists(path):
os.system('echo # > {}'.format(path))
# append lines to the file
split_text = text_file.split('\n')
for st in split_text:
os.system('echo {} >> {}'.format(st,path))