Hướng dẫn how do i give permission to a folder in python? - làm cách nào để cấp quyền cho một thư mục trong python?

Tôi đang cố gắng thay đổi quyền truy cập tệp:

os.chmod(path, mode)

Tôi muốn làm cho nó chỉ đọc:

os.chmod(path, 0444)

Có cách nào khác làm cho một tệp chỉ đọc không?

Hướng dẫn how do i give permission to a folder in python? - làm cách nào để cấp quyền cho một thư mục trong python?

Lii

11.3k8 Huy hiệu vàng60 Huy hiệu bạc84 Huy hiệu đồng8 gold badges60 silver badges84 bronze badges

Hỏi ngày 27 tháng 4 năm 2013 lúc 7:17Apr 27, 2013 at 7:17

Abul Hasnatabul HasnatAbul Hasnat

1.4611 Huy hiệu vàng14 Huy hiệu bạc22 Huy hiệu đồng1 gold badge14 silver badges22 bronze badges

4

os.chmod(path, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)

Stat

Các cờ sau đây cũng có thể được sử dụng trong đối số chế độ của OS.Chmod ():

os.chmod(path, 0444)
1 Đặt bit uid.

os.chmod(path, 0444)
2 Set-nhóm-id bit. Bit này có một số công dụng đặc biệt. Đối với một thư mục, nó chỉ ra rằng ngữ nghĩa BSD sẽ được sử dụng cho thư mục đó: các tệp được tạo ở đó kế thừa ID nhóm của họ từ thư mục, không phải từ ID nhóm hiệu quả của quy trình tạo và các thư mục được tạo ở đó cũng sẽ nhận được bộ bit S_ISGID. Đối với một tệp không có BIT thực thi nhóm (S_IXGRP), bit ID nhóm tập hợp chỉ ra tệp bắt buộc/khóa bản ghi (xem thêm S_ENFMT).

os.chmod(path, 0444)
3 bit dính. Khi bit này được đặt trên một thư mục, điều đó có nghĩa là một tệp trong thư mục đó có thể được đổi tên hoặc xóa bởi chủ sở hữu của tệp, bởi chủ sở hữu của thư mục hoặc bởi một quy trình đặc quyền.

os.chmod(path, 0444)
4 Mặt nạ cho quyền của chủ sở hữu tệp.

os.chmod(path, 0444)
5 Chủ sở hữu đã đọc quyền.

os.chmod(path, 0444)
6 Chủ sở hữu có quyền viết.

os.chmod(path, 0444)
7 Chủ sở hữu có quyền thực thi.

os.chmod(path, 0444)
8 Mặt nạ cho quyền nhóm.

os.chmod(path, 0444)
9 Nhóm có quyền đọc.

os.chmod(path, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)
0 Nhóm có quyền viết.

os.chmod(path, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)
1 Nhóm có quyền thực thi.

os.chmod(path, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)
2 Mặt nạ cho quyền cho người khác (không phải trong nhóm).

os.chmod(path, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)
3 Những người khác có quyền đọc.

os.chmod(path, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)
4 Những người khác có quyền viết.

os.chmod(path, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)
5 Những người khác có quyền thực thi.

os.chmod(path, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)
6 Hệ thống v Thực thi khóa tập tin. Cờ này được chia sẻ với S_ISGID: Tệp/khóa bản ghi được thực thi trên các tệp không có bộ bit thực hiện nhóm (S_IXGRP).

os.chmod(path, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)
7 UNIX V7 Từ đồng nghĩa với S_irusr.

os.chmod(path, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)
8 UNIX V7 Từ đồng nghĩa với S_IWUSR.

os.chmod(path, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)
9 UNIX V7 Từ đồng nghĩa với S_IXUSR.

Đã trả lời ngày 27 tháng 4 năm 2013 lúc 7:45Apr 27, 2013 at 7:45

Hướng dẫn how do i give permission to a folder in python? - làm cách nào để cấp quyền cho một thư mục trong python?

John La Rooyjohn La RooyJohn La Rooy

288K51 Huy hiệu vàng359 Huy hiệu bạc500 Huy hiệu Đồng51 gold badges359 silver badges500 bronze badges

6

Đơn giản chỉ cần bao gồm số nguyên quyền trong bát phân (hoạt động cho cả Python 2 và Python3):

os.chmod(path, 0o444)

Đã trả lời ngày 16 tháng 8 năm 2018 lúc 13:31Aug 16, 2018 at 13:31

0

os.chmod(path, 0o444)
0 là lệnh Python để thay đổi quyền tệp trong Python 2.x. Đối với một giải pháp Python 2 và Python 3 kết hợp, thay đổi
os.chmod(path, 0o444)
1 thành
os.chmod(path, 0o444)
2.

Bạn luôn có thể sử dụng Python để gọi lệnh CHMOD bằng cách sử dụng

os.chmod(path, 0o444)
3. Tôi nghĩ rằng điều này sẽ chỉ hoạt động trên Linux mặc dù.

import subprocess

subprocess.run(['chmod', '0444', 'path'])

Hướng dẫn how do i give permission to a folder in python? - làm cách nào để cấp quyền cho một thư mục trong python?

Đã trả lời ngày 27 tháng 4 năm 2013 lúc 7:21Apr 27, 2013 at 7:21

Inbar Roseinbar RoseInbar Rose

40.2K24 Huy hiệu vàng82 Huy hiệu bạc128 Huy hiệu đồng24 gold badges82 silver badges128 bronze badges

3

Tất cả các câu trả lời hiện tại clobber các quyền không viết: họ làm cho tệp có thể đọc được nhưng không thể thực hiện được cho mọi người. Cấp, điều này là do câu hỏi ban đầu được yêu cầu cho các quyền

os.chmod(path, 0o444)
4 - nhưng chúng ta có thể làm tốt hơn!

Đây là một giải pháp để lại tất cả các bit "đọc" và "thực thi" riêng lẻ. Tôi đã viết mã verbose để làm cho nó dễ hiểu; Bạn có thể làm cho nó ngắn gọn hơn nếu bạn thích.

import os
import stat

def remove_write_permissions(path):
    """Remove write permissions from this path, while keeping all other permissions intact.

    Params:
        path:  The path whose permissions to alter.
    """
    NO_USER_WRITING = ~stat.S_IWUSR
    NO_GROUP_WRITING = ~stat.S_IWGRP
    NO_OTHER_WRITING = ~stat.S_IWOTH
    NO_WRITING = NO_USER_WRITING & NO_GROUP_WRITING & NO_OTHER_WRITING

    current_permissions = stat.S_IMODE(os.lstat(path).st_mode)
    os.chmod(path, current_permissions & NO_WRITING)

Tại sao điều này hoạt động?

Như John La Rooy đã chỉ ra, ________ 16 về cơ bản có nghĩa là "Bitmask cho quyền viết của người dùng". Chúng tôi muốn đặt bit quyền tương ứng thành 0. Để thực hiện điều đó, chúng tôi cần Bitmask ngược lại chính xác (tức là, một có 0 ở vị trí đó và 1 ở mọi nơi khác). Toán tử

os.chmod(path, 0o444)
6, lật tất cả các bit, cung cấp cho chúng ta chính xác điều đó. Nếu chúng tôi áp dụng điều này cho bất kỳ biến nào thông qua toán tử "bitwise và" (
os.chmod(path, 0o444)
7), nó sẽ không ra khỏi bit tương ứng.

Chúng ta cũng cần lặp lại logic này với các bit "nhóm" và "khác". Ở đây chúng ta có thể tiết kiệm thời gian chỉ bằng cách ________ 37 tất cả chúng lại với nhau (tạo thành hằng số bit ____39).

Bước cuối cùng là nhận được quyền của tệp hiện tại và thực sự thực hiện thao tác bitwise-và.

Đã trả lời ngày 21 tháng 7 năm 2016 lúc 17:51Jul 21, 2016 at 17:51

1

Chỉ cần thêm 0 trước số quyền: Ví dụ: Chúng tôi muốn cấp tất cả các quyền - 777 Cú pháp: OS.Chmod ("File_Name", quyền)
For example - we want to give all permissions - 777
Syntax: os.chmod("file_name" , permission)

import os
os.chmod("file_name" , 0777)

Python phiên bản 3.7 không hỗ trợ cú pháp này. Nó yêu cầu tiền tố '0o' cho các chữ viết hoa octal - đây là nhận xét tôi đã nhận được trong pycharm

Vì vậy, đối với Python 3.7, nó sẽ

import os
os.chmod("file_name" , 0o777)

Đã trả lời ngày 11 tháng 3 năm 2020 lúc 7:58Mar 11, 2020 at 7:58

FYI ở đây là một hàm để chuyển đổi chuỗi quyền với 9 ký tự (ví dụ: 'RWSR-X-WT') thành mặt nạ có thể được sử dụng với

import subprocess

subprocess.run(['chmod', '0444', 'path'])
0.

def perm2mask(p):
        
    assert len(p) == 9, 'Bad permission length'
    assert all(p[k] in 'rw-' for k in [0,1,3,4,6,7]), 'Bad permission format (read-write)'
    assert all(p[k] in 'xs-' for k in [2,5]), 'Bad permission format (execute)'
    assert p[8] in 'xt-', 'Bad permission format (execute other)'
    
    m = 0
    
    if p[0] == 'r': m |= stat.S_IRUSR 
    if p[1] == 'w': m |= stat.S_IWUSR 
    if p[2] == 'x': m |= stat.S_IXUSR 
    if p[2] == 's': m |= stat.S_IXUSR | stat.S_ISUID 
    
    if p[3] == 'r': m |= stat.S_IRGRP 
    if p[4] == 'w': m |= stat.S_IWGRP 
    if p[5] == 'x': m |= stat.S_IXGRP 
    if p[5] == 's': m |= stat.S_IXGRP | stat.S_ISGID 
    
    if p[6] == 'r': m |= stat.S_IROTH 
    if p[7] == 'w': m |= stat.S_IWOTH 
    if p[8] == 'x': m |= stat.S_IXOTH 
    if p[8] == 't': m |= stat.S_IXOTH | stat.S_ISVTX
    
    return m

Lưu ý rằng cài đặt bit SUID/SGID/SVTX sẽ tự động đặt bit thực thi tương ứng. Nếu không có điều này, sự cho phép kết quả sẽ không hợp lệ (các ký tự

import subprocess

subprocess.run(['chmod', '0444', 'path'])
1).

Đã trả lời ngày 8 tháng 8 năm 2019 lúc 15:05Aug 8, 2019 at 15:05

Jonathan Hjonathan hJonathan H

7.3935 Huy hiệu vàng47 Huy hiệu bạc79 Huy hiệu đồng5 gold badges47 silver badges79 bronze badges

Bạn cũng có thể sử dụng, Pathlib cũng

from pathlib import Path

fl = Path("file_name")

fl.chmod(0o444)

Đã trả lời ngày 20 tháng 4 năm 2020 lúc 17:25Apr 20, 2020 at 17:25

SupernovasupernovaSuperNova

23.4K6 Huy hiệu vàng88 Huy hiệu bạc61 Huy hiệu Đồng6 gold badges88 silver badges61 bronze badges

Trong Python 3.4+, khi làm việc với các đối tượng

import subprocess

subprocess.run(['chmod', '0444', 'path'])
2, bạn có thể gọi
import subprocess

subprocess.run(['chmod', '0444', 'path'])
3 trực tiếp làm phương thức trên đối tượng đường dẫn.Ví dụ sau được đưa ra trong các tài liệu:

os.chmod(path, 0444)
0

Đã trả lời ngày 29 tháng 10 năm 2021 lúc 11:10Oct 29, 2021 at 11:10

Hướng dẫn how do i give permission to a folder in python? - làm cách nào để cấp quyền cho một thư mục trong python?

Louis Maddoxlouis MaddoxLouis Maddox

4.9385 Huy hiệu vàng34 Huy hiệu bạc63 Huy hiệu Đồng5 gold badges34 silver badges63 bronze badges

Không cần phải nhớ cờ.Hãy nhớ rằng bạn luôn có thể làm:

import subprocess

subprocess.run(['chmod', '0444', 'path'])
4

Không di động nhưng dễ viết và nhớ:

  • u - người dùng
  • G - Nhóm
  • O - Khác
  • A - tất cả
  • + hoặc - (thêm hoặc xóa quyền)
  • R - Đọc
  • W - Viết
  • x - thực thi

Tham khảo

import subprocess

subprocess.run(['chmod', '0444', 'path'])
5 để biết các tùy chọn bổ sung và giải thích chi tiết hơn.

Đã trả lời ngày 26 tháng 3 năm 2018 lúc 13:18Mar 26, 2018 at 13:18

Solgarsolgarsolgar

4.0631 Huy hiệu vàng23 Huy hiệu bạc 30 Huy hiệu Đồng1 gold badge23 silver badges30 bronze badges

1