Django terminal

lp9 |
Разработку web-приложения на Django я веду в IDE, но запускать Django-сервер и работать в Django-shell и с базой данных предпочитаю через терминал. Для ускорения начала работы в нем, я написал скрипт, который запускает gnome-terminal с четырьмя вкладками, в которых запущены ./manage.py runserver, ./manage.py shell, ./manage.py dbshell и bash.

#!/bin/bash

###
#
# Run a django manage.py subcommands in a gnome-terminal tabs.
# To switch to a tab after terminal launch install xdotool.
#
###

BASH=/bin/bash
PYTHON=/usr/bin/python
GNOME_TERMINAL=/usr/bin/gnome-terminal
XDOTOOL=/usr/bin/xdotool

# config
WORK_DIR=/media/share/Sources/django/yourpics
MANAGE_SUBCOMMANDS="shell dbshell"
SWITCH_TO_TAB=2

${PYTHON} -c """
import subprocess

terminal = ['${GNOME_TERMINAL}']

terminal.extend(['--tab', '-e', '''
    ${BASH} -c '
        cd ${WORK_DIR}
        for (( ; ; )) ; do 
            ${BASH} -c \"./manage.py runserver\"
            ${BASH}
        done
    '
    '''])

for cmd in '${MANAGE_SUBCOMMANDS}'.split():
    terminal.extend(['--tab', '-e', '''
        ${BASH} -c '
            cd ${WORK_DIR}
            ./manage.py {cmd}
            read
        '
        '''.format(cmd=cmd)])

terminal.extend(['--tab', '-e', '''
    ${BASH} -c '
        cd ${WORK_DIR}
        [ -x ${XDOTOOL} ] && ${XDOTOOL} key alt+${SWITCH_TO_TAB}
        ${BASH}
        read
    '
    '''])

subprocess.call(terminal)
"""

Настройка скрипта производится переменными:
WORK_DIR: путь к вашему проекту на Django;
MANAGE_SUBCOMMANDS: команды manage.py для запуска во вкладках;
SWITCH_TO_TAB: переключиться к вкладке после запуска терминала (необходимо установить xdotool).
Для запуска скрипта сохраняем его в файл django_terminal и даем права на исполнение:
chmod +x django_terminal 

далее, копируем в /usr/local/bin:
cp django_terminal /usr/local/bin.

Для удобства запуска добавляем исполняемый файл в горячие клавиши, например, на Ctrl+Alt+D.
Особенности работы с вкладкой запущенного сервера:
Django-сервер запускается в бесконечном цикле для того, чтобы его можно было перезагружать. После остановки сервера по Ctrl+C управление передается bash. Если не нужно закрывать вкладку и по новой запустить сервер выходим из bash по Ctrl+D. Для закрытия вкладки нужно остановить сервер, посмотреть pid запущенной вкладки gnome-terminal’а и завершить процесс.
$ ps aux |grep [r]unserver
lynx      8665  0.0  0.0  12304  1604 pts/8    Ss   13:42   0:00 /bin/bash -c ?        cd /media/share/Sources/django/yourpics?        for (( ; ; )) ; do ?            /bin/bash -c "./manage.py runserver"?            /bin/bash?        done?    
$ kill -9 8665

Внимание, если закрыть окно терминала, то запущенные процессы не остановятся, а продолжат висеть в памяти.
Теги: Share