2012-01-03 25 views
12

Tôi đang viết một tệp python mylib.pypython: làm cách nào để biết liệu tệp có được thực thi khi nhập so với tập lệnh chính không?

Tôi muốn mylib.py thực hiện điều gì đó dựa trên sys.argv nếu nó được thực thi dưới dạng tập lệnh. Nhưng nếu nó được nhập từ một số tập lệnh khác, tôi không muốn nó làm điều đó.

Làm cách nào để biết tệp python của tôi đang được nhập hay là tập lệnh chính?

(Tôi đã nhìn thấy làm thế nào để làm điều này trước đây, nhưng tôi quên.)

+1

Bạn không đơn độc trong điều này, nhân tiện. Các câu thần chú là khó nhớ lúc đầu và nó thường được coi là một mụn cóc của ngôn ngữ. –

+3

Có vẻ như có một hàm 'sys.isMain()' để làm cho việc này trở nên dễ dàng hơn. –

Trả lời

25
if __name__ == '__main__': 
    # this was run as a main script 

Đây là documentation on __main__.

Thông thường mã này được đặt ở cuối mô-đun và cách thông thường để giữ mã của bạn là tạo một hàm main() thực hiện tất cả công việc và chỉ gọi hàm đó bên trong điều kiện.

5
if __name__ == '__main__': 
    # goes here only when module is being executed directly 

gói cũng có thể chứa __main__ module, được thực hiện khi bạn làm python -m foo (hoặc thực hiện zipfile chứa gói).

1

Bằng cách sử dụng (đặt những điều khoản mà bạn muốn được thực hiện chỉ khi các module đang chạy như main, không được nhập)

if __name__ == "__main__": 
     # this was run as a main script 

tuyên bố chung khác nhau có phải được đặt trong khối này 'nếu' như thế nào, module cụ thể doctest cuộc gọi hoặc in điều statements.The là theo mặc định (khi chạy là chính) của __name__ 'biến được thiết lập để "__main__", và nếu không (nếu nhập khẩu) biến số __name__ sẽ nhận được một giá trị khác, có thể là tên của mô-đun.

+1

+1 kể từ khi nó chính xác ... nhưng tôi đã có một câu trả lời đúng một năm trước đây. –

+0

@ Jason thấy nó, nhưng muốn chia sẻ câu trả lời của tôi (vấn đề của thực tế tôi đã bản thân mình nắm bắt các khái niệm gần đây). Cảm ơn –

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