2010-07-30 19 views
7

Mỗi lần tôi thực hiện thay đổi thành tập lệnh python, tôi phải tải lại python và nhập lại mô-đun. Xin vui lòng tư vấn cho làm thế nào tôi có thể sửa đổi kịch bản của tôi và chạy sau đó mà không cần phải khởi chạy lại python trong thiết bị đầu cuối.Cần khởi động lại python trong Terminal mỗi lần thay đổi được thực hiện thành tập lệnh

Cảm ơn.

+0

Vâng! Ít nhất python có tải lại. PHP chỉ freaks ra và chết với một 'không thể redeclare chức năng' blah blah. – JAL

Trả lời

5

Tôi đã có một gợi ý, dựa trên nhận xét của bạn mô tả luồng công việc của bạn:

đầu tiên, tôi chạy python3.1 tại nhà ga thứ hai, tôi làm "mô-đun nhập khẩu", sau đó, tôi chạy một phương pháp từ các mô-đun cho phép nói "module.method (arg)" mỗi lần, tôi cố gắng để gỡ lỗi mã, tôi phải làm toàn bộ chuỗi này, mặc dù sự thay đổi là nhỏ. nó là không hiệu quả

Thay vì kích hoạt vỏ Python tương tác, hãy tự thực hiện mô-đun. Cách đơn giản nhất để làm điều này là để thêm một khối để dưới cùng của các mô-đun như vậy:

if __name__ == '__main__': 
    method(arg) # matches what you run manually in the Python shell 

Sau đó, thay vì chạy python3.1, sau đó nhập khẩu các mô-đun, sau đó gọi phương pháp này, bạn có thể làm điều gì đó như thế này:

python3.1 modulename.py 

và Python sẽ chạy bất kỳ mã nào nằm trong khối if __name__ == '__main__'. Nhưng mã đó sẽ không được chạy nếu mô-đun được nhập bởi một mô-đun Python khác. Thông tin thêm về thành ngữ Python phổ biến này có thể được tìm thấy in the Python tutorial.

Lợi thế của việc này là khi bạn thực hiện thay đổi mã, bạn thường có thể chỉ chạy lại mô-đun bằng cách nhấn mũi tên lên và nhấn enter. Không có tải lại lộn xộn cần thiết.

+0

Cảm ơn! Đề xuất tuyệt vời. :) – nebulus

2

Nếu chỉ là một số mô-đun đang thay đổi, bạn có thể gọi reload(module) trong tập lệnh của mình.

+0

Điều này là đúng, nhưng lưu ý rằng nếu bạn làm theo liên kết bạn sẽ thấy có một số cảnh báo. –

1

Bạn có nghĩa là bạn nhập tập lệnh trực tiếp vào trăn tương tác, hoặc bạn đang thực thi tệp .py của bạn từ thiết bị đầu cuối bằng cách chạy một cái gì đó như python myscript.py?

+0

đầu tiên, tôi chạy python3.1 trong thiết bị đầu cuối giây, tôi làm "mô-đun nhập" sau đó, tôi chạy một phương thức từ mô-đun cho phép nói "module.method (arg)" mỗi lần, tôi cố gắng gỡ lỗi mã, tôi phải làm toàn bộ trình tự, mặc dù thay đổi nhỏ. nó là rất hiệu quả – nebulus

+0

* Cập nhật: * Tôi thấy Will McCutchen đánh tôi với cú đấm. Những gì bạn sẽ làm gì là viết kịch bản cho bạn trong một tệp thay vì thực hiện nó trong thiết bị đầu cuối. Ví dụ: tệp của bạn được đặt tên là "myscript.py". Viết tất cả các lệnh trong đó sau đó chỉ cần 'python3.1 myscript.py' trong cùng một thư mục như kịch bản của bạn được đặt và nó sẽ được chạy. Bằng cách đó bạn không phải gõ vào các lệnh mỗi lần. Bạn đang chạy hệ điều hành nào, cửa sổ? –

0

Bạn có thể sử dụng reload để nhập lại mô-đun. Tôi sử dụng nó thường xuyên khi sử dụng chế độ tương tác để gỡ lỗi mã.

Tuy nhiên, từ cấp độ cao hơn, tôi sẽ do dự khi sử dụng nó trong phiên bản sản xuất của chương trình. Trừ khi bạn sẽ có quyền kiểm soát rất nghiêm ngặt về cách các mô-đun phụ đang thay đổi, sẽ không khó để có sự thay đổi mô-đun được tải lại theo cách nào đó làm hỏng chương trình của bạn. Trừ khi chương trình của bạn thực sự cần 100% thời gian hoạt động, nó sẽ có ý nghĩa để ngăn chặn nó và bắt đầu lại khi có một số loại thay đổi phiên bản.

+0

tải lại không hoạt động trong thiết bị đầu cuối. – nebulus

+1

Đối với Python 3, tải lại đã được chuyển sang 'imp', vì vậy bạn sẽ phải nhập' imp' và sau đó 'imp.reload (mod)' – AdmiralNemo

0

Tôi tìm thấy đường vòng trực tuyến. Lệnh ma thuật tồn tại. Nó hoạt động như một sự quyến rũ đối với tôi. Tùy chọn Tải lại không hoạt động đối với tôi. OK từ số here và điểm 3 của liên kết này.

Về cơ bản tất cả những gì bạn phải làm là như sau: và những thay đổi bạn thực hiện được phản ánh tự động sau khi bạn lưu.

In [1]: %load_ext autoreload 

In [2]: %autoreload 2 

In [3]: Import MODULE 

In [4]: my_class = Module.class() 
     my_class.printham() 
Out[4]: ham 

In [5]: #make changes to printham and save 
In [6]: my_class.printham() 
Out[6]: hamlet 
Các vấn đề liên quan