выполненный virtualenv на новой терминальной вкладке автоматически

Я использую virtualenv, так для запуска я должен сказать

source some/long/path/bin/activate

Иногда (очень часто, на самом деле) я хочу создать другую вкладку в терминале, отредактировать другой сценарий или выполнить оболочку django и т.д. И после создания другой вкладки я должен сказать source some/long/path/bin/activate снова. На самом деле это довольно скучно.

Там какой-либо путь состоит в том, чтобы вызвать терминальное выполнение это волшебные слова автоматически? Таким образом, если я ввожу CtrlShiftT в терминале, и на текущей вкладке virtualenv, работал, терминал должен открыть тот же самый virtualenv на свежей новой вкладке.

Или может быть что-то совершенно другое для решения этой проблемы.

3
задан 25 June 2016 в 19:50

2 ответа

Я использую conda для виртуальных сред, и я чувствовал ту же потребность как Ваш вопрос. Таким образом, я записал простой сценарий оболочки для меня. Затем я столкнулся с этим вопросом и переписал мой сценарий для virtualenv использования.

  1. Сохраняют следующий код как сценарий
  2. Имя это вообще, Вы хотите. Скажем, tab.
  3. Дают разрешение выполнить его: sudo chmod +x tab.
  4. mv tab /usr/local/bin/ для создания этого вызываемой командой отовсюду.
  5. сценарий зависит от трех других инструментов, xclip, xdotool, и wmctrl. Если у Вас нет их, sudo apt install xclip xdotool, wmctrl
  6. Yay! Я был слишком ленив к Управление + Сдвиг + T и работал source /.../bin/activate, но я теперь могу сделать tab!
#!/bin/sh

# Copy the clipboard content to restore later
original_clipboard=$(xclip -o)

# Copy the path of your virtual environment to clipboard
echo $VIRTUAL_ENV | xclip


# The following four lines open a new tab and switch to it.
# Copied from: https://stackoverflow.com/a/2191093/10953328
WID=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| awk '{print $5}')
xdotool windowfocus $WID
xdotool key ctrl+shift+t
wmctrl -i -a $WID

# Activate your virtualenv
xdotool type --delay 0.5 --clearmodifiers "source $(xclip -o)/bin/activate"
xdotool key Return;

# Restore the original clipboard content
echo $original_clipboard | xclip

Протестированный с Ubuntu 18.0.4, GNOME 3.28.2, и это хорошо работает. xdotools 3.20160805.1, xclip 0.12, wmctrl 1.07, но я действительно не думаю, что это будет иметь значение очень, не так ли?

Некоторая часть сценария копируется от это, ТАК ответьте , как упомянуто в самом сценарии.

1
ответ дан 1 December 2019 в 16:58

Автоматически выполнение команды на создании новой терминальной вкладки было бы функцией определенного терминала, с которым Вы используете, и не связанные python или virtualenv.

Иметь более широкий диапазон или отвечает на вопрос, должен был бы, вероятно, быть То, как автоматически выполнить команду оболочки для эмулятора терминала xyz. Например, для gnome-terminal можно использовать пользовательские профили, как описано в https://unix.stackexchange.com/a/3856/15312, но это - непортативное решение, если Вы решаете переключиться на другой терминал или платформу.

Более простое и больше портативного обходного решения настроили бы псевдонимы для Вашей оболочки так, чтобы Вы не должны были вводить слишком много.

Конкретно относительно virtualenv: Вы могли бы хотеть попробовать virtualenvwrapper, который может помочь уменьшить объем ввода и сделать руководящие среды легче путем обеспечения автозавершения для virtualenv папок.

И наконец, как быстрое обходное решение, вместо того, чтобы создать новые вкладки с тем же ENV, можно приостановить в настоящее время рабочий процесс (такой как manage.py runserver) с Ctr+z, дополнительно выполненным bg для возобновления его в фоне затем отредактируйте и сохраните файл и возвратите его переднему плану с fg. Дополнительную информацию см. в этом.

1
ответ дан 1 December 2019 в 16:58

Другие вопросы по тегам:

Похожие вопросы: