2012-01-27 25 views
7

Điều gì sẽ là một cách di động để xác định xem quy trình Python có thể di chuyển/xóa tệp mà không cần phải di chuyển/xóa tệp được đề cập không?Cách di động để xác định xem một quá trình có thể di chuyển/xóa tệp không?

Trường hợp sử dụng: Tôi muốn thông báo cho người dùng biết tập lệnh có hay không di chuyển/xóa hoạt động sẽ thành công/không thành công trước khi bắt đầu xử lý.

Nếu có giải pháp chỉ hoạt động trong Linux, tôi sẽ đồng ý với điều đó trong thời điểm này.

Cảm ơn.

cập nhật: Tôi hiểu rằng os.access có thể được sử dụng nhưng giới hạn ở uid/gid thực.

+0

Không chắc chắn rằng bạn đang sử dụng mô hình bảo mật chính xác nhưng vẫn quan tâm. Việc thực hiện kinh điển duy nhất cho điều này tôi đã thấy là bên trong hạt nhân, tôi không chắc chắn rằng nó tiếp xúc anyway, và để làm như vậy là khuyến khích các loại sai của lập trình. –

+3

Có điều gì đó không hoàn toàn đúng khi đưa "truy cập người đàn ông" vào Google ... –

+0

Có thể 'bool (os.stat (filepath) .st_mode & stat.S_IWGRP)'? – reclosedev

Trả lời

1

Sẽ mở tệp để thêm công việc?

try: 
    open(filename,'a').close() 

... và bắt bất kỳ ngoại lệ nào cho thấy không thành công?

Sử dụng thận trọng, tôi thực sự không chắc chắn rằng sẽ không làm bất cứ điều gì khó chịu do nhầm lẫn. Ví dụ ít nhất là tạm thời bạn sẽ bị khóa tập tin, và tôi không biết điều đó sẽ làm gì với một tệp nhị phân.

+0

Nếu bạn có thể nối thêm vào một tệp, nhưng không ghi vào thư mục đó, bạn không thể xóa hoặc di chuyển nó. – ArjunShankar

+0

Điểm tốt. Bạn cũng có thể thử tạo và xóa tệp tạm thời trong thư mục. Tất cả điều này có vẻ khá vụng về với tôi, phải thừa nhận, nhưng nó không phải là os cụ thể ít nhất. –

+0

Hmm, ý tưởng tạo/xóa này có vẻ là bằng chứng ngu ngốc hơn và 'di động' (mặc dù nó là xấu). Tôi đề nghị bạn chỉnh sửa câu trả lời của bạn và đưa nó vào. Chỉ có điều còn lại sẽ được xử lý các bit thư mục dính trên UNIX. – ArjunShankar

0

Nếu tôi nhớ không lầm, ba điều kiện cần phải được đáp ứng cho điều này trên UNIXes:

  1. Người dùng có thể ghi vào thư mục chứa tập tin gốc (để xóa hoặc di chuyển)
  2. Nếu thư mục chứa bản gốc tệp có tập bit dính, tệp gốc phải do người dùng sở hữu (để xóa hoặc di chuyển)
  3. Trong trường hợp di chuyển, ngoài ra, người dùng có thể ghi vào thư mục cần di chuyển đến

Trong trăn, điều kiện 1 và 3 có thể được kiểm tra với os.access và điều kiện 2 với os.stat herehere.

Cập nhật: Nếu bạn muốn làm việc với UID hiệu quả, sau đó sử dụng os.geteuid() và giải thích stat kết quả để kiểm tra 1 và 3.

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