Saya perlu menjalankan skrip Python dari shell Django. Saya mencoba:
./manage.py shell << my_script.py
Tapi itu tidak berhasil. Itu hanya menunggu saya untuk menulis sesuatu.
python
django
django-shell
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
sumber
sumber
django
kerjanya, apa yang sebenarnya ingin Anda lakukan?my_script.py
berisi beberapa operasi pada salah satu model Django saya. Saya sudah melakukan ini sebelumnya tetapi saya tidak ingat persisnya.Jawaban:
Bagian
<<
itu salah, gunakan<
sebaliknya:Anda juga bisa:
Untuk python3, Anda harus menggunakan
sumber
./manage.py shell <<EOF\ execfile('myscript.py') \EOF
echo 'import myscript' | python manage.py shell
. Saya menemukan ini berguna untuk skrip cepat dan kotor yang hanya perlu Anda jalankan sekali saja, tanpa harus melalui proses rumit membuatmanage.py
perintah.Get-Content myscript.py | .\manage.py shell
Anda tidak disarankan untuk melakukan itu dari
shell
- dan ini dimaksudkan karena Anda seharusnya tidak benar-benar mengeksekusi skrip acak dari lingkungan Django (tetapi ada cara - cara di sekitar ini, lihat jawaban lain).Jika ini adalah sebuah script yang Anda akan menjalankan beberapa kali, itu ide yang baik untuk memasangnya sebagai perintah khusus yaitu
untuk melakukan ini, buat file dalam subdirek
management
dancommands
Andaapp
, yaitudan dalam file ini tentukan perintah kustom Anda (memastikan bahwa nama file adalah nama perintah yang ingin Anda jalankan
./manage.py
)sumber
NoArgsCommand
sudah ditinggalkan. Halaman ini memberikan contoh yang bermanfaat: docs.djangoproject.com/en/1.9/howto/custom-management-commands/…def handle_noargs(self, **options):
kedef handle(self, **options):
.def handle(self, **options):
komentar James.Bagi siapa pun yang menggunakan Django 1.7+, tampaknya mengimpor modul pengaturan saja tidak cukup.
Setelah menggali, saya menemukan jawaban Stack Overflow ini: https://stackoverflow.com/a/23241093
Anda sekarang perlu:
Tanpa melakukan hal di atas, saya mendapatkan
django.core.exceptions.AppRegistryNoReady
kesalahan.File skrip saya berada di direktori yang sama dengan proyek Django saya (mis. Dalam folder yang sama dengan manage.py)
sumber
DJANGO_SETTINGS_MODULE
variabel lingkungan. Dengan itu cukup hanya: diimport django ; django.setup()
bawah 1,7.django.setup()
tidak akan membiarkan skrip mengakses model Django, bahkan tidak mengimpornya!import django; django.setup()
.Saya terlambat ke pesta, tetapi saya berharap tanggapan saya akan membantu seseorang: Anda dapat melakukan ini dalam skrip Python Anda:
sisa barangmu ada di sini ....
sumber
sys.path.append
barang - barang selama Anda melakukannya denganDJANGO_SETTINGS_MODULES
benar (mis. Jika Anda memiliki skrip yang berada tepat di atas root situs Anda, Anda dapat melakukannyaos.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
).sys.path.append(os.getcwd())
, ini berfungsi ketika saya berada di dalam direktori proyek saya, DJANGO_SETTINGS_MODULE saya benar dan saya mencoba menjalankan skrip yang mengimpor model, tampilan, dll.runscript
dari django-extensionsSampel
script.py
untuk mengujinya:Disebutkan di: http://django-extensions.readthedocs.io/en/latest/command_extensions.html dan didokumentasikan di:
Ada tutorial juga .
Diuji pada Django 1.9.6, Django-extensions 1.6.7.
sumber
django-extensions
(Anda harus). Catatan: Sepertinyarunscript
menggunakan Django standarshell
. Akan luar biasa jika digunakanshell_plus
(juga dalam ekstensi) sehingga Anda tidak perlu mengimpor semuanya untuk skrip sederhana.Jika IPython tersedia (
pip install ipython
) maka./manage.py shell
secara otomatis akan menggunakan shell itu dan kemudian Anda dapat menggunakan perintah ajaib%run
:sumber
runscript
dengan skrip yang bekerja di luar proyek / paket dan tidak mengeluh seperti iniTypeError: the 'package' argument is required to perform a relative import for
Anda bisa menjalankan skrip dengan
DJANGO_SETTINGS_MODULE
set variabel lingkungan. Hanya itu yang diperlukan untuk mengatur lingkungan Django-shell.Ini berfungsi di Django> = 1.4
sumber
@AtulVarma memberikan komentar yang sangat berguna di bawah jawaban diterima yang tidak berfungsi :
sumber
jika Anda tidak memiliki banyak perintah dalam skrip Anda gunakan:
Django docs
sumber
Seperti yang ditunjukkan oleh jawaban lain tetapi tidak secara eksplisit menyatakan, apa yang sebenarnya Anda butuhkan tidak harus mengeksekusi skrip Anda dari Django shell, tetapi untuk mengakses aplikasi Anda tanpa menggunakan shell Django .
Ini berbeda banyak versi Django ke versi Django. Jika Anda tidak menemukan solusi di utas ini, jawab di sini - skrip Django untuk mengakses objek model tanpa menggunakan manage.py shell - atau pencarian serupa dapat membantu Anda.
Saya harus memulai my_command.py dengan
lalu berlari
python3 my_command.py
(Django 2.0.2)
sumber
sys.path.append('/path/to/myproject')
denganBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
dan `sys.path.append (BASE_DIR)`. Juga jangan lupa untuk mengaktifkan env virtual Anda sebelum menjalankan perintah!sumber
Catatan, metode ini telah usang untuk versi Django yang lebih baru! (> 1.3)
Jawaban alternatif, Anda dapat menambahkan ini ke atas
my_script.py
dan jalankan
my_script.py
hanya dengan python di direktori di mana Anda memilikisettings.py
tetapi ini agak hacky.sumber
Jika Anda ingin menjalankan di BG lebih baik lagi:
Outputnya akan masuk
nohup.out
sumber
Sesuatu yang baru saja saya temukan menarik adalah Django Scripts, yang memungkinkan Anda menulis skrip untuk dijalankan dengan python manage.py runcript foobar. Informasi lebih rinci tentang implementasi dan memo dapat ditemukan di sini, http://django-extensions.readthedocs.org/en/latest/index.html
sumber
Coba ini jika Anda menggunakan lingkungan virtual: -
untuk menggunakan perintah itu, Anda harus berada di dalam lingkungan virtual. untuk penggunaan ini: -
sebagai contoh :-
Catatan : - Di sini situs saya adalah nama situs web saya dan jango adalah nama lingkungan virtual saya
sumber
datang ke sini dengan pertanyaan yang sama dengan OP, dan saya menemukan jawaban favorit saya justru dalam kesalahan dalam pertanyaan, yang juga berfungsi di Python 3:
sumber
Cara lain menjalankan yang ini:
Ini bekerja pada Python2.7 dan Django1.9
sumber
Jika Anda ingin menjalankan skrip startup (mis. Mengimpor beberapa model Django untuk bekerja dengannya secara interaktif) dan tetap berada di shell Djakarta:
sumber
Shell django adalah cara yang baik untuk mengeksekusi modul python dengan lingkungan django, tetapi tidak selalu mudah dan melelahkan untuk mengimpor modul dan menjalankan fungsi secara manual terutama tanpa pelengkapan otomatis. Untuk mengatasi ini, saya membuat skrip shell kecil "runningcript.sh" yang memungkinkan Anda untuk mengambil keuntungan penuh dari penyelesaian otomatis dan riwayat log dari konsol Linux.
NB: Salin runningcript.sh ke proyek root dan setel hak eksekusi (chmod + x)
Sebagai contoh: Saya ingin menjalankan fungsi python bernama show (a, b, c) di modul do_somethings.py di myapp / do_folder /
Cara django standar (kelola.py shell):
Dengan skrip (runningcript.sh):
Skrip tidak dibatasi dalam jumlah argumen. Namun hanya argumen tipe primitif yang didukung (int, float, string)
sumber
runscript
daridjango-extensions
paket melakukan hal yang sama, periksa django-extensions.readthedocs.io/en/latest/runscript.htmlTerlambat ke pesta. Tetapi ini mungkin bermanfaat bagi seseorang.
Yang Anda butuhkan hanyalah skrip Anda dan
django-extensions
diinstal.Jalankan saja yang
shell_plus
tersedia didjango_extensions
dan impor skrip yang telah Anda tulis.Jika skrip Anda ada
scpt.py
dan di dalam folderfol
Anda dapat menjalankan skrip sebagai berikut.dan cukup impor skrip Anda di dalam shell sebagai berikut.
sumber
django.setup () tampaknya tidak berfungsi.
tampaknya tidak diperlukan juga.
ini saja berhasil.
sumber