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?
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 []:
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, 0444]
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.os.chmod[path, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH]
Đã trả lời ngày 27 tháng 4 năm 2013 lúc 7:45Apr 27, 2013 at 7:45
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']]
Đã 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
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']]
4Khô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