Hướng dẫn python check permissions of a directory - python kiểm tra quyền của một thư mục
Bạn có thể sử dụng OS.Access (đường dẫn, chế độ) để kiểm tra quyền thư mục với các chế độ để đọc, viết và thực thi quyền. Để có thể viết, bạn cũng cần phải kiểm tra quyền thực thi. Ví dụ, >>> import os >>> os.access('my_folder', os.R_OK) # Check for read access True >>> os.access('my_folder', os.W_OK) # Check for write access True >>> os.access('my_folder', os.X_OK) # Check for execution access True >>> os.access('my_folder', os.X_OK | ox.W_OK) # Check if we can write file to the directory True Bạn cũng có thể làm theo một thành ngữ Python phổ biến: dễ dàng yêu cầu sự tha thứ hơn là cho phép. Theo thành ngữ đó, bạn nên thử viết vào thư mục được đề cập và bắt lỗi nếu bạn không có quyền làm như vậy.
Cập nhật vào ngày 03 tháng 10 năm 2019 05:39:04
Điều gì sẽ là cách tốt nhất trong Python để xác định xem một thư mục có thể ghi được cho người dùng thực thi tập lệnh không? Vì điều này có thể sẽ liên quan đến việc sử dụng mô -đun HĐH nên tôi nên đề cập đến việc tôi đang chạy nó theo môi trường *nix. Hỏi ngày 21 tháng 1 năm 2010 lúc 22:24Jan 21, 2010 at 22:24
IlluminedTigerilluminedtigerilluminatedtiger 1.4913 huy hiệu vàng12 Huy hiệu bạc8 Huy hiệu đồng3 gold badges12 silver badges8 bronze badges Mặc dù những gì Christophe đề xuất là một giải pháp pythonic hơn, mô -đun HĐH có chức năng OS.Access để kiểm tra quyền truy cập: 1 # w_ok là để viết, r_ok để đọc, v.v.
Đã trả lời ngày 21 tháng 1 năm 2010 lúc 22:39Jan 21, 2010 at 22:39
Max Shawabkehmax ShawabkehMax Shawabkeh 36,9k9 Huy hiệu vàng81 Huy hiệu bạc91 Huy hiệu Đồng9 gold badges81 silver badges91 bronze badges 7 Nó có vẻ lạ khi đề xuất điều này, nhưng một thành ngữ Python phổ biến là
Theo thành ngữ đó, người ta có thể nói: Hãy thử viết vào thư mục trong câu hỏi và bắt lỗi nếu bạn không có quyền làm như vậy.
sschilli 1.8731 Huy hiệu vàng11 Huy hiệu bạc31 Huy hiệu đồng1 gold badge11 silver badges31 bronze badges Đã trả lời ngày 21 tháng 1 năm 2010 lúc 22:30Jan 21, 2010 at 22:30
ChristophedchristophedChristopheD 109K27 Huy hiệu vàng160 Huy hiệu bạc177 Huy hiệu đồng27 gold badges160 silver badges177 bronze badges 10 Giải pháp của tôi bằng cách sử dụng mô -đun 2:
CẬP NHẬT: Sau khi kiểm tra lại mã trên Windows, tôi thấy rằng thực sự có vấn đề khi sử dụng TempFile ở đó, hãy xem Vấn đề22107: Mô -đun TempFile diễn giải sai Lỗi bị từ chối trên Windows. Trong trường hợp của một thư mục không chiến đấu, mã treo trong vài giây và cuối cùng ném một 3. Có lẽ đây là những gì User2171842 đã quan sát? Thật không may, vấn đề hiện không được giải quyết vì vậy để xử lý vấn đề này, lỗi cũng cần phải bị bắt:
Sự chậm trễ tất nhiên vẫn còn trong những trường hợp này.
Kawu 13.4K33 Huy hiệu vàng118 Huy hiệu bạc193 Huy hiệu đồng33 gold badges118 silver badges193 bronze badges Đã trả lời ngày 16 tháng 9 năm 2014 lúc 12:30Sep 16, 2014 at 12:30
3 Tình cờ tìm thấy chủ đề này để tìm kiếm các ví dụ cho ai đó. Kết quả đầu tiên trên Google, chúc mừng! Mọi người nói về cách làm pythonic trong chủ đề này, nhưng không có ví dụ mã đơn giản? Bạn đi đây, cho bất kỳ ai khác vấp ngã:
Điều này cố gắng mở một fileHandle để viết và thoát ra với lỗi nếu tệp được chỉ định không thể được ghi vào: Điều này dễ đọc hơn và là một cách tốt hơn nhiều , vì nó tránh được điều kiện chủng tộc; Các trường hợp trong đó tệp trở nên không thể biết được giữa thời gian bạn chạy precheck và khi bạn thực sự cố gắng ghi vào tệp. Đã trả lời ngày 23 tháng 6 năm 2012 lúc 13:52Jun 23, 2012 at 13:52
RohaqrohaqRohaq 1.8261 Huy hiệu vàng15 Huy hiệu bạc22 Huy hiệu đồng1 gold badge15 silver badges22 bronze badges 5 Nếu bạn chỉ quan tâm đến các perms tệp, 4 nên làm những gì bạn yêu cầu. Thay vào đó, nếu bạn muốn biết liệu bạn có thể ghi vào thư mục hay không, 5 một tệp kiểm tra để viết (nó không tồn tại trước), bắt và kiểm tra bất kỳ 6 nào và làm sạch tệp kiểm tra sau đó.can write to the
directory, 5 a test file for writing (it shouldn't exist beforehand), catch and examine any 6, and clean up the test file afterwards.Tổng quát hơn, để tránh các cuộc tấn công của Toctou (chỉ là vấn đề nếu tập lệnh của bạn chạy với các đặc quyền cao-SUID hoặc CGI hoặc hơn), bạn không nên thực sự tin tưởng các bài kiểm tra trước thời gian này, nhưng bỏ các tư nhân, thực hiện 5 và Mong đợi 6.Đã trả lời ngày 21 tháng 1 năm 2010 lúc 23:17Jan 21, 2010 at 23:17
Sverkerwsverkerwsverkerw 4912 Huy hiệu bạc6 Huy hiệu đồng2 silver badges6 bronze badges Kiểm tra các bit chế độ:
Biogeek 21.4K21 Huy hiệu vàng81 Huy hiệu bạc140 Huy hiệu đồng21 gold badges81 silver badges140 bronze badges Đã trả lời ngày 21 tháng 1 năm 2010 lúc 22:32Jan 21, 2010 at 22:32
Joe Kobergjoe KobergJoe Koberg 24.5k6 Huy hiệu vàng47 Huy hiệu bạc52 Huy hiệu Đồng6 gold badges47 silver badges52 bronze badges 1 Đây là một cái gì đó tôi đã tạo ra dựa trên câu trả lời của Christophed:
Đã trả lời ngày 23 tháng 12 năm 2011 lúc 20:43Dec 23, 2011 at 20:43
Khattamkhattamkhattam 1.1741 Huy hiệu vàng8 Huy hiệu bạc14 Huy hiệu đồng1 gold badge8 silver badges14 bronze badges 1
Thông tin thêm về truy cập có thể tìm thấy nó ở đây Đã trả lời ngày 16 tháng 5 năm 2017 lúc 15:30May 16, 2017 at 15:30
SoftMixTsoftMixtSoftmixt 1.58819 huy hiệu bạc20 Huy hiệu đồng19 silver badges20 bronze badges 1 Tôi đã gặp phải nhu cầu tương tự trong khi thêm một đối số thông qua Argparse. Được xây dựng trong 9 sẽ không hoạt động với tôi vì tôi đang tìm kiếm một thư mục. Cuối cùng tôi đã viết phương pháp của riêng mình để giải quyết vấn đề của mình. Đây là kết quả với đoạn trích Argparse.
Kết quả sau:
Tôi đã quay lại và thêm in opts.dir vào cuối, và mọi thứ dường như hoạt động như mong muốn.print opts.dir to the end, and everything appears to be functioning as desired.
Bmacnaughton 4.7003 huy hiệu vàng25 Huy hiệu bạc34 Huy hiệu đồng3 gold badges25 silver badges34 bronze badges Đã trả lời ngày 6 tháng 10 năm 2018 lúc 4:07Oct 6, 2018 at 4:07
Nếu bạn cần kiểm tra sự cho phép của người dùng khác (vâng, tôi nhận ra điều này mâu thuẫn với câu hỏi, nhưng có thể có ích cho ai đó), bạn có thể thực hiện thông qua mô -đun 0 và các bit của Chế độ thư mục.another user (yes, I realize this contradicts the question, but may come in handy for someone), you can do it through the 0 module, and the directory's mode bits.Tuyên bố miễn trừ trách nhiệm - không hoạt động trên Windows, vì nó không sử dụng mô hình quyền POSIX (và mô -đun 0 module is not available there), e.g. - solution only for *nix systems.Lưu ý rằng một thư mục phải có tất cả các bộ 3 bit - đọc, viết và thực thi. OK, R không phải là một điều tuyệt đối, nhưng không thể liệt kê các mục trong thư mục (vì vậy bạn phải biết tên của họ). Mặt khác, thực thi là hoàn toàn cần thiết - w/o Nó Người dùng không thể đọc Inodes của tệp; Vì vậy, ngay cả có W, không có các tệp X cũng không thể được tạo hoặc sửa đổi. Giải thích chi tiết hơn tại liên kết này. Cuối cùng, các chế độ có sẵn trong mô -đun 2, các mô tả của chúng nằm trong Inode (7) người đàn ông.Mã mẫu Cách kiểm tra:
Đã trả lời ngày 14 tháng 10 năm 2017 lúc 13:35Oct 14, 2017 at 13:35
Todor Minakovtodor MinakovTodor Minakov 18.1k3 Huy hiệu vàng52 Huy hiệu bạc58 Huy hiệu Đồng3 gold badges52 silver badges58 bronze badges Kiểm tra xem một đối tượng chỉ số có thể đọc được hoặc có thể ghi không hữu ích để kiểm tra xem một đường ống có thể đọc được hoặc có thể ghi không 0Dựa trên câu trả lời của Joe Koberg Xem thêm: Điều tương tự trong JavaScript có lẽ bị hỏng trên cửa sổ Đã trả lời ngày 29 tháng 6 lúc 15:16Jun 29 at 15:16
Milahumilahumilahu 1.8991 Huy hiệu vàng11 Huy hiệu bạc19 Huy hiệu đồng1 gold badge11 silver badges19 bronze badges |