2014-06-06 27 views
8

Hiện tại tôi sử dụng os.path.join hầu như luôn luôn trong dự án django của tôi để hỗ trợ hệ điều hành chéo; những nơi duy nhất tôi hiện không sử dụng nó là dành cho tên mẫu và URL. Vì vậy, trong các tình huống mà tôi muốn đường dẫn '/path/to/some/file.ext' Tôi sử dụng os.path.join('path', 'to', 'some', 'file.ext').os.path.join có cần thiết không?

Tuy nhiên tôi chỉ thử nghiệm dự án của tôi trên cửa sổ để xem liệu có làm việc tốt/là cần thiết và có vẻ như các cửa sổ hạnh phúc sẽ chấp nhận '/' hoặc '\\' (hoặc '\' khi làm việc bên ngoài của python), và như tất cả các hệ thống UNIX đều sử dụng '/' nó có vẻ như không có lý do gì để sử dụng '\\', trong trường hợp nào là cần thiết để sử dụng os.path.join ở bất kỳ đâu?

Có tình huống trong đó thêm '/' hoặc sử dụng posixpath sẽ gây ra sự cố trên một số hệ điều hành nhất định (không bao gồm XP hoặc thấp hơn vì chúng không còn được hỗ trợ chính thức)? Nếu không, tôi nghĩ tôi sẽ chỉ sử dụng posixpath hoặc thêm '/' để tham gia biến với các biến hoặc biến khác bằng chuỗi và không tách riêng đường dẫn chuỗi (vì vậy hãy để nó ở dạng '/path/to/some/file.ext') trừ khi có một lý do khác khiến tôi không làm điều đó ngoài nó đập phá đồ đạc.

Để tránh điều này có thể bị đóng như ý kiến ​​chủ yếu, tôi muốn làm rõ rằng câu hỏi cụ thể của tôi là việc không sử dụng os.path.join sẽ bao giờ gây ra chương trình python không hoạt động như dự định trên hệ điều hành được hỗ trợ.

+1

Mặc dù có lẽ quá bí truyền cho một câu trả lời, bằng cách sử dụng dấu phân cách đường dẫn mã cứng sẽ gây ra không có khả năng di chuyển với RISC OS .. (và [có cổng] (https: // www. python.org/download/other/) để như vậy) – user2864740

+0

Hệ điều hành RISC có tương thích với django, nginx, giám sát viên và các thư viện django khác nhau không? Nếu không, tôi sẽ không cần phải lo lắng về nó trên dự án này, nhưng nếu nó có thể là giá trị tôi suy nghĩ về. – semicolon

Trả lời

13

API Microsoft Windows không quan tâm bạn có sử dụng / hoặc \, vì vậy thường thì tốt để sử dụng làm dấu phân tách trên Windows. Tuy nhiên, dòng lệnh ("DOS box" - command.com hoặc cmd.exe) lệnh thường yêu cầu \ trong đường dẫn (/ được sử dụng để gắn cờ tùy chọn lệnh trong các vỏ Windows gốc này). Vì vậy, ví dụ, nếu bạn xây dựng một dòng lệnh trong Python và bắn ra một trình bao để thực thi lệnh, thông thường bạn sẽ cần phải sử dụng dấu phân cách \ trên Windows.

Một trường hợp khác được bao gồm trong Lib/macpath.py: có sep được đặt thành : (dấu hai chấm), cung cấp cho các hệ thống Macintosh cũ hơn. Tôi tin rằng đó là hệ thống duy nhất Python đã từng chạy trên đó không chấp nhận / như một dấu phân cách.

EDIT: see here để có tài khoản dài của quy tắc đặt tên Windows. Đừng đổ lỗi cho tôi ;-)

+0

Trong cmd.exe loại lệnh nào sẽ không hoạt động? Bởi vì tôi vừa thử nghiệm cd './test/test' và 'python .test/manage.py' và cả hai đều hoạt động tốt. – semicolon

+0

Hãy thử nhiều hơn - bạn sẽ tìm thấy nhiều thứ không hoạt động ;-) Ví dụ: 'dir./ misc' nếu bạn đang ở trong một thư mục có thư mục con 'misc'. Bạn sẽ gặp phải lỗi 'Invalid switch -" misc ".'. Để kiểm tra chính xác tất cả các trường hợp, bạn sẽ phải hỏi Microsoft :-( –

+0

Được rồi cảm ơn! Tôi đã thử nghiệm 'cd' và 'python' ngay lập tức vì chúng tôi đã sử dụng và giả định rằng/thực sự đã hoạt động. – semicolon

4

Nếu bạn đang trình bày tên tệp cho người dùng vì bất kỳ lý do gì, tốt hơn nếu tên tệp đó tuân theo quy ước OS thông thường.

Windows đã có thể sử dụng / để phân tách đường dẫn miễn là đã có đường dẫn - đây là tính năng DOS.

+0

Trong trường hợp này, nó nằm trên một trang web để các đường dẫn thời gian duy nhất sẽ được trình bày là đường dẫn URL sẽ luôn sử dụng/vì vậy tôi ổn khi chỉ sử dụng /? Và cảm ơn thông tin trên/luôn được hỗ trợ. – semicolon

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