2009-02-04 44 views
8

Làm cách nào để thay đổi thư mục vào thư mục bằng tập lệnh python của tôi? Cho đến nay tôi đã tìm ra tôi nên sử dụng os.chdirsys.argv[0]. Tôi chắc chắn có một cách tốt hơn sau đó để viết chức năng của riêng tôi để phân tích argv [0].Thay đổi thư mục vào thư mục của tập lệnh Python

+0

Bạn có thể sao chép trực tiếp mã này: 'os nhập; os.chdir (os.path.dirname (__ file __)) ' – Basj

Trả lời

16
os.chdir(os.path.dirname(__file__)) 
+0

vì lý do gì __file__ là C: \ dev \ Python25 \ Lib \ idlelib để thay thế nhanh chóng bằng argv [0] đã giải quyết nó. +1 và kiểm tra đánh dấu –

+1

Ngoài ra, tùy thuộc vào nền tảng bạn có thể muốn sử dụng 'os.path.abspath' trên kết quả của' os.path.dirname' để đảm bảo mọi liên kết tượng trưng hoặc chuyển hướng hệ thống tệp khác được mở rộng đúng cách. –

5

Đôi khi __file__ không được xác định, trong trường hợp này bạn có thể thử sys.path[0]

+1

@Miki - khi nào '__file__' không được xác định? –

+3

@RobBednark: 'python3.3 -c" print (__ file __) "' –

+1

@JanusTroelsen: Cũng đúng với Python 2.7. – George

4

os.chdir(os.path.dirname(os.path.abspath(__file__))) nên làm điều đó.

os.chdir(os.path.dirname(__file__)) sẽ không hoạt động nếu tập lệnh được chạy từ thư mục hiện có.

+0

Nó cũng hoạt động để viết 'os.chdir (os.path.dirname (__ file__) hoặc '.')'. Vấn đề trong thư mục phát sinh khi '__file__' không được bắt đầu bằng'./'. 'os.path.dirname' trả về một chuỗi rỗng trong trường hợp đó. – George

+0

Quan sát tốt đẹp @George :) – iamas

0

trên hệ điều hành windows, nếu bạn gọi cái gì đó như python somefile.py này os.chdir (os.path.dirname (__ file__)) sẽ ném một WindowsError. Nhưng điều này sẽ phù hợp với mọi trường hợp:

import os 
absFilePath = os.path.abspath(__file__) 
os.chdir(os.path.dirname(absFilePath)) 
Các vấn đề liên quan