2012-07-16 46 views
7

這個問題:Automatically import models on Django shell launch有解釋如何通過使用shell_plus開始導入模型,但沒有答案關於如何運行一般的代碼。如何在django shell啓動時運行任意代碼?

但是,有沒有簡單的方法來運行一個python腳本?

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

只是運行腳本,就好像在shell啓動時鍵入整個內容一樣。

我意識到你可以在shell中導入東西,但是它們被困在命名空間中。

我認爲ipython應該有一種方法來運行腳本,然後將它的locals()導入到頂級命名空間。在這種情況下,你可以做%magic script.py,我們只需要一步,這會很好。

更改啓動shell的方式應該沒問題 - 主要目標是隻能創建在啓動shell時運行的文件。

回答

1

不知道如果有,你可以使用一個標誌,但如果你有IPython的安裝應該是這麼簡單:

ipython

然後,當你在提示:

run script.py

然後:

run manage.py shell

2

您可以創建自己的自定義命令,就像shell_plus已完成的操作:請參閱shell_plus命令的source以查看方式。在該代碼中,您可以指定並運行在啓動shell之前需要執行的文件。 Django的文檔creating custom commands也很有用。

2

您可以嘗試使用環境變量PYTHONSTARTUP。 另請嘗試django-extensions:django-extensions

請參閱django-extensions/management/commands/shell_plus.py命令。

從這個命令的源代碼,我看到它尊重PYTHONSTARTUP env變量。

+0

問題是我可能不希望它運行所有shell - 我使用ipython除了django以外的東西!而shell_plus只加載模型。 – fastmultiplication 2012-07-17 03:17:08

1

shell_plus使用IPython的一種有限形式,它不會處理其啓動&配置,這會破壞在django + ipython shell啓動時運行事物的大多數正常嘗試。您可以將其切換爲使用可以解決大多數問題的完整版本。

修改django_extensions/management/commands/shell_plus。PY

刪除:

embed(user_ns=imported_objects) 

,取而代之的是:

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

然後在啓動目錄中的Python代碼會被加載。

相關問題