2012-05-13 40 views
35

Tôi nhận được IOError: [Errno 13] Permission denied và tôi không biết điều gì sai với mã này.Python - IOError: [Errno 13] Quyền bị từ chối:

Tôi đang cố gắng để đọc một tập tin đưa ra một đường dẫn tuyệt đối (nghĩa là chỉ file.asm),

và một đường dẫn tương đối (nghĩa /.../file.asm), và tôi muốn chương trình để ghi các file để bất cứ con đường được đưa ra - nếu nó là tuyệt đối, nó nên ghi nó vào thư mục hiện hành; nếu không, với đường dẫn đã cho.

mã:

#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 

lỗi đưa ra:

IOError: [Errno 13] Permission denied: '/Use.hack' 

cách tôi thực thi mã:

python assembler.py Users/***/Desktop/University/Add.asm 

Tôi đang làm gì sai ở đây?

+2

hầu hết bạn không có lời mời để viết thư mục gốc - và đúng vậy, có vẻ như – Ingo

Trả lời

15

Có vẻ như bạn đang cố gắng thay thế phần mở rộng với đoạn mã sau:

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

Tuy nhiên, dường như bạn có các chỉ số mảng lẫn lộn. Hãy thử các cách sau:

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

Lưu ý việc sử dụng -4 thay vì chỉ 4 trong dòng thứ hai của mã. Điều này giải thích tại sao chương trình của bạn đang cố gắng tạo /Use.hack, là đầu tiên bốn ký tự của tên tệp của bạn (/Use), với .hack được thêm vào.

+0

có, bạn nói đúng. nhưng bây giờ tôi nhận được: IOError: [Errno 2] Không có tệp hoặc thư mục nào như vậy: 'Người dùng/itzikhanoch/Desktop/University/Add.hack' im sử dụng 'w' tại sao anh ta nên tìm bất kỳ tệp nào? nó phải viết nó. – Itzik984

+3

Bây giờ có vẻ như bạn đang chuyển 'Người dùng/...' thay vì '/ Người dùng/...'. Lưu ý dấu gạch chéo hàng đầu, điều đó quan trọng. Nếu không có dấu gạch chéo hàng đầu, bạn đang cố mở một tệp trong thư mục con * của thư mục hiện tại * được gọi là 'Người dùng'. –

9

Bạn không có đủ quyền để ghi vào thư mục gốc. Xem dấu gạch chéo hàng đầu trên tên tệp?

+0

có bất kỳ điều gì mà tôi có thể thực hiện không? im viết thư này vào một thư mục đơn giản trên màn hình của tôi, không có gì đặc biệt – Itzik984

+2

Chỉ cần thử xóa '/' ngay từ đầu. – Ashe

+5

Tìm hiểu con đường tuyệt đối và tương đối là gì - bạn hiểu sai. Tìm hiểu nơi một con đường như/foo sẽ dẫn đầu. – Ingo

-1

Tất nhiên bạn có thể. Hãy thử thay đổi dòng này:

output = open(newFile, 'w') 

tới:

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

nó nên lưu tập tin của bạn vào thư mục địa phương.

+0

bây giờ nó sẽ không viết bất cứ điều gì ... không thể tìm thấy tập tin bất cứ nơi nào – Itzik984

+0

@ Itzik984: Nếu bạn không nhận được một lỗi, sau đó tập tin được viết * một nơi nào đó *. Đó là một nơi nào đó có thể sẽ là thư mục làm việc hiện tại của quá trình đã viết tệp. –

+0

@GregHewgill bạn nói đúng. lấy làm tiếc. nhưng vẫn còn, tôi cần nó để được viết trong đường dẫn nhất định, không phải là thư mục làm việc hiện tại ... – Itzik984

23

Chỉ cần đóng tệp đã mở nơi bạn định viết.

+1

Câu trả lời này không có ý nghĩa gì đối với câu hỏi… – duskwuff

4

Điều này xảy ra với tôi khi tôi đang sử dụng 'shutil.copyfile' thay vì 'shutil.copy'. Các điều khoản đã được sai lầm.

-2

Đối với tôi, đây là vấn đề về quyền.

Sử dụng ứng dụng 'Take Ownership' trên thư mục cụ thể đó. Tuy nhiên, điều này đôi khi dường như chỉ hoạt động tạm thời và không phải là giải pháp lâu dài.

Các vấn đề liên quan