2012-07-16 27 views
7

Câu hỏi này: Automatically import models on Django shell launch có câu trả lời giải thích cách nhập mô hình khi bắt đầu bằng cách sử dụng shell_plus, nhưng không có câu trả lời về cách chạy mã nói chung.Làm thế nào để chạy mã tùy ý khi bắt đầu shell django?

Nhưng có cách nào dễ dàng để chạy tập lệnh python không?

python manage.py shell [or shell_plus] --run=script.py 

Chỉ chạy tập lệnh như thể bạn đã nhập toàn bộ nội dung khi trình bao bắt đầu.

Tôi nhận thấy rằng bạn có thể nhập mọi thứ vào trong trình bao, nhưng sau đó chúng bị kẹt trong một không gian tên.

Tôi nghĩ rằng ipython nên có cách để chạy tập lệnh, sau đó nhập locals() vào không gian tên dự phòng. Trong trường hợp đó, bạn chỉ có thể làm %magic script.py và chúng tôi sẽ chỉ thực hiện một bước, điều này sẽ tốt.

Thay đổi cách bạn bắt đầu trình bao phải ổn - mục tiêu chính là chỉ có thể tạo tệp chạy khi khởi động trình bao.

Trả lời

1

Không chắc nếu có một lá cờ, bạn có thể sử dụng, nhưng nếu bạn có ipython cài đặt nó nên càng đơn giản như:

ipython

Sau đó, khi bạn đang ở dấu nhắc:

run script.py

Sau đó:

run manage.py shell

2

Bạn có thể tạo lệnh tùy chỉnh của riêng mình giống như shell_plus đã thực hiện: xem source của lệnh shell_plus để xem cách thực hiện. Trong mã đó, bạn có thể chỉ định và chạy tệp cần được thực hiện trước khi bắt đầu trình bao. Cũng hữu ích là tài liệu của Django trên creating custom commands.

2

Bạn có thể thử sử dụng biến môi trường PYTHONSTARTUP. Đồng thời thử dùng các tiện ích mở rộng django: django-extensions

Xem lệnh django-extensions/management/commands/shell_plus.py.

Từ mã nguồn của lệnh này, tôi thấy rằng nó tôn trọng biến env PYTHONSTARTUP.

+0

vấn đề là tôi có thể không muốn nó được chạy cho tất cả các trình bao - tôi sử dụng ipython cho những thứ khác ngoài django! và shell_plus chỉ tải các mô hình. – fastmultiplication

1

shell_plus sử dụng một hình thức hạn chế về IPython mà không xử lý cấu hình khởi động & của nó, mà đánh bại nỗ lực bình thường nhất để chạy điều tại django + ipython vỏ khởi động. Bạn có thể chuyển đổi nó để sử dụng phiên bản đầy đủ mà sẽ giải quyết hầu hết các vấn đề.

Sửa đổi django_extensions/management/commands/shell_plus.py

remove:

embed(user_ns=imported_objects) 

và thay thế bằng:

from IPython import start_ipython 
start_ipython(argv=[], user_ns=imported_objects) 

Sau đó, mã python của bạn trong thư mục khởi động sẽ được nạp.

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