2012-05-13 2 views
35

나는 IOError: [Errno 13] Permission denied을 얻고 있으며이 코드가 무엇이 잘못 되었는가를 알지 못합니다.Python - IOError : [Errno 13] 권한이 거부되었습니다.

나는 (만 file.asm를 의미) 절대 경로 주어진 파일을 읽을

과 (/.../file.asm을 의미) 상대 경로를 시도하고, 나는 주어진 어떤 경로에 파일을 쓸 수있는 프로그램을 원하는 - 그것이 절대적이라면, 그것은 현재의 dir에 그것을 써야한다; 그렇지 않으면 주어진 경로로.

코드 :

#call to main function 
if __name__ == '__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 

은 내가 잘못 여기서 뭐하는 거지?

+2

아마도 루트 디렉토리에 쓰기 권한이 없으므로 – Ingo

답변

15

는 것 같습니다. 다음보십시오 :

if (myFile[-4:] == ".asm"): 
    newFile = myFile[:-4]+".hack" 

참고 코드의 두 번째 줄에 대신 4-4의 사용. 이것은 귀하의 프로그램이 /Use.hack, 즉 파일 이름의 첫 번째 네 개의 문자 (/Use)이고 그 뒤에 .hack이 추가 된 이유를 설명합니다.

+0

네, 맞습니다. 하지만 지금받을 : IOError : [Errno 2] 해당 파일이나 디렉토리가 없습니다 : 'Users/itzikhanoch/Desktop/University/Add.hack' 메신저 'w'를 사용하여 왜 파일을 찾아야합니까? 그것을 쓸 줄 알았다. – Itzik984

+3

이제/User/... 대신'User/...'를 전달하는 것처럼 보입니다. 중요한 점은주의해야합니다. 첫 번째 슬래시가 없으면 현재 디렉토리의 * 하위 디렉토리에있는 파일을 열려고합니다. "User"라고합니다. –

9

루트 디렉터리에 쓸 수있는 권한이 없습니다. 파일 이름에 선행 슬래시가 보이십니까?

+0

은 내가 할 수있는 것이 무엇입니까? 메신저 내 바탕 화면의 간단한 폴더에 이것을 쓰는 중, 특별한 것은 없습니다 – Itzik984

+2

처음에는 '/'를 제거하십시오. – Ashe

+5

절대 경로와 상대 경로가 무엇인지 알아보십시오./foo와 같은 경로가 어디에서 발생하는지 배우십시오. – Ingo

-1

물론 가능합니다. 이 라인을 변경하려고 :

output = open(newFile, 'w') 

에 :

output = open("./%s" % (newFile), 'w') 

그것이 로컬 디렉토리에 파일을 저장해야합니다.

if (myFile[-4:] == ".asm"): 
    newFile = myFile[:4]+".hack" 

그러나, 당신이 혼합 배열 인덱스가 나타납니다 : 다음 코드로 확장을 대체하려는처럼

+0

이제는 아무 것도 쓰지 않을 것입니다 ... 어디서나 파일을 찾을 수 없습니다. – Itzik984

+0

@ Itzik984 : 오류가 발생하지 않았다면 파일은 * 어딘가에 작성되었습니다. 어딘가에 파일을 작성한 프로세스의 현재 작업 디렉토리가있을 것입니다. –

+0

@ GregHewgill 당신 말이 맞습니다. 죄송합니다. 그러나 여전히, 나는 현재의 작업 디렉토리가 아니라 주어진 경로에 쓰여 져야한다. – Itzik984

23

작성하려는 곳에 열린 파일을 닫습니다.

+1

이 답변은 질문에 의미가 없습니다 ... – duskwuff

4

'shutil.copy'대신 'shutil.copyfile'을 사용할 때 이런 일이 발생했습니다. 권한이 엉망이되었습니다.

-2

나를 위해 이것은 사용 권한 문제가되었습니다.

해당 폴더에서 '소유권 가져 오기'응용 프로그램을 사용하십시오. 그러나 때로는 일시적으로 작동하는 것처럼 보일뿐 아니라 영구적 인 해결 방법이 아닙니다.

관련 문제