2011-09-13 43 views
14

Có cách nào để lấy đường dẫn thư mục Desktop Desktop trong nền tảng chéo cách, lý tưởng chỉ sử dụng các mô-đun chuẩn, bằng Python?Đường dẫn thư mục Desktop đa nền tảng?

giải pháp Mac OS X + Windows hiện tại của tôi là để kiểm tra mà hệ thống đang chạy Python với sys.platform và sau đó làm như sau:

  • Mac OS X có thể được xử lý với os.path.join(os.path.expanduser('~'), 'Desktop').
  • Windows có thể sử dụng mô-đun không chuẩn win32com hoặc mô-đun phụ thuộc vào ctypes winpaths; có một sự thay thế tiêu chuẩn?
  • Và còn Linux thì sao?

Tôi sẽ hài lòng với giải pháp hoạt động trên Mac OS X, Windows và Linux.

+1

Chúng là các hệ điều hành khác nhau. Câu trả lời tầm thường hầu như là "Không", không có tiêu chuẩn nào áp dụng cho cả hai họ hệ điều hành. Windows không chuẩn.Bạn có lẽ yêu cầu một cách để giảm thiểu sự khác biệt? Vui lòng đăng mã bạn đang sử dụng để chúng tôi có thể - đơn giản hóa nó. –

+1

cho chúng tôi [tiếp tục cuộc thảo luận này trong trò chuyện] (http://chat.stackoverflow.com/rooms/3413/discussion-between-eol-and-s-lott) – EOL

Trả lời

14

Bên dưới cửa sổ, trang chủ của người dùng là %HOMEPATH% tương đương với linux và Mac ~. Bên dưới này, có một thư mục Desktop giống như trên máy Mac. Python tự động chuyển đổi ~ thành% HOMEPATH% trên cửa sổ, vì vậy lệnh Mac của bạn sẽ hoạt động trên hộp trên Mac và Windows.

Trên Linux, điều này phức tạp hơn một chút. Trước tiên, hãy hiểu rằng hộp Linux bạn đang chạy có thể không một máy tính để bàn, do đó không có thư mục dành cho máy tính để bàn của người dùng. Nếu bạn có trình quản lý cửa sổ, nó có thể hoặc không thể theo mô hình ~\Desktop. The wikipedia entry on window managers đi sâu vào chi tiết hơn, bao gồm so sánh giữa một số trình quản lý cửa sổ X phổ biến hơn trong một số liên kết phụ.

Đặt cược tốt nhất của bạn sẽ là lùi lại và tự hỏi mình tại sao tôi muốn/cần thư mục người dùng trên máy tính để bàn? Có phải tạo lối tắt trong khi cài đặt không? Bạn có thể tốt hơn với tiện ích trình biên tập cài đặt, chẳng hạn như nsis, xử lý các chi tiết đó. Nếu đó là để lưu trữ tệp, ngay cả tạm thời, bạn có thể muốn suy nghĩ lại về thiết kế của mình. Hoặc bạn đang tìm kiếm điều gì đó, trong trường hợp đó, tìm kiếm hệ thống tệp có thể là cách để đi, thay vì kiểm tra thư mục đơn lẻ dễ vỡ.

Giống như hầu hết mọi thứ, tất cả phụ thuộc vào những gì bạn muốn thực hiện.

Như EOL đã lưu ý trong nhận xét của mình, Windows hơi phức tạp hơn lần đầu tiên xuất hiện. His link to a more complete article on the Windows Desktop thư mục có thêm chi tiết về nội địa hóa cho thư mục trên máy tính để bàn. Điều này rất quan trọng đối với các nhà xây dựng các ứng dụng quốc tế cần tính đến, hoặc sử dụng bản địa hóa tự động được tích hợp vào bộ công cụ của họ hoặc tránh những thứ sử dụng nó.

+1

Cảm ơn bạn đã nhận xét về Linux. Đối với Windows, đôi khi nó đặt Desktop dưới tên thư mục được bản địa hóa (http://bytes.com/topic/python/answers/719464-how-create-file-users-xp-desktop), vì vậy nó trông giống như Cách tiếp cận win2com tốt hơn, phải không? – EOL

+0

Tôi quan tâm đến đường dẫn Máy tính để bàn vì (1) Người dùng chạy chương trình (từ khóa USB) tạo nhiều tệp đầu ra. Những tệp này không được chuyển sang khóa USB vì người dùng có thể không giữ được khóa. (2) Những tập tin đầu ra này cũng nên được thực hiện dễ dàng "có thể nhìn thấy" cho người dùng, để anh ta tìm thấy chúng một cách dễ dàng, do đó ý tưởng Desktop. – EOL

+0

@EOL nhờ liên kết, tôi không biết điều đó. Đối với đầu ra, nó sẽ không được đơn giản hơn để nói cho người dùng nơi bạn đặt các tập tin, và/hoặc mở một cửa sổ thám hiểm để hiển thị các thư mục? Lý tưởng nhất, chúng ta nên tạo một thư mục con mới, để tránh trộn các tệp mới vào nội dung của chúng, trong trường hợp chúng muốn xóa chúng dễ dàng. –

17

tôi sử dụng như sau:

import os 
desktop_file = os.path.expanduser("~/Desktop/myfile.txt") 

Trên Unix và Windows, trả lại cãi nhau với một thành phần ban đầu của ~ hay ~ người sử dụng thay thế bằng thư mục home của người dùng đó.

Tham chiếu: os.path. expanduser

+0

Câu trả lời này thực sự trả về "MÔI TRƯỜNG PATHTHON DEFAULT PATH", nó không hiệu quả với tôi. –

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