web-dev-qa-db-fra.com

lancer virtualenv dans le nouvel onglet du terminal automatiquement

J'utilise virtualenv, alors pour commencer, je dois dire

source some/long/path/bin/activate

Parfois (très souvent, en fait) je veux créer un autre onglet dans le terminal, éditer un autre script, ou lancer Django Shell etc. Et après la création d'un autre onglet, je dois répéter source some/long/path/bin/activate . En fait, c'est assez ennuyeux.

Est-il possible de forcer le terminal à exécuter automatiquement ces mots magiques? Donc si je tape CtrlShiftT dans terminal et dans l'onglet actuel, virtualenv est exécuté, terminal doit ouvrir le même virtualenv dans le nouvel onglet.

Ou peut-être quelque chose de complètement différent pour résoudre ce problème.

3
polytheme

L'exécution automatique d'une commande lors de la création d'un nouvel onglet de terminal serait une fonctionnalité du terminal spécifique que vous utilisez, et non liée à python ou virtualenv.

Pour autoriser une commande Shell pour l'émulateur de terminal xyz . Par exemple, pour gnome-terminal, vous pouvez utiliser des profils personnalisés comme décrit dans la section https://unix.stackexchange.com/a/3856/15312 , mais il s’agit d’une solution non transférable si vous décidez de le faire. basculer vers un autre terminal ou une autre plateforme.

Une solution de contournement plus simple et plus portable consisterait à configurer des alias pour votre Shell afin que vous n'ayez pas besoin de trop taper.

En ce qui concerne plus particulièrement virtualenv: vous pouvez essayer virtualenvwrapper , ce qui peut aider à réduire le nombre de saisies et faciliter la gestion des environnements en fournissant la complétion automatique pour les dossiers virtualenv.

Enfin, pour contourner le problème rapidement, au lieu de créer de nouveaux onglets avec le même env, vous pouvez suspendre un processus en cours d'exécution (tel que manage.py runserver) avec Ctr+z, exécutez éventuellement bg pour le reprendre en arrière-plan, puis modifiez et enregistrez un fichier, puis ramenez-le au premier plan avec fg. Voir this pour plus de détails.

1
ccpizza

J'utilise conda pour les environnements virtuels et j'ai ressenti le même besoin que votre question. J'ai donc écrit un script Shell simple pour moi-même. Je suis ensuite tombé sur cette question et j'ai réécrit mon script pour l’utilisation de virtualenv.

  1. Enregistrez le code suivant en tant que script
  2. Nommez-le comme vous voulez. Disons tab.
  3. Donnez la permission de l'exécuter: Sudo chmod +x tab.
  4. mv tab /usr/local/bin/ pour en faire une commande appelable de partout.
  5. Le script dépend de trois autres outils, xclip, xdotool et wmctrl. Si vous ne les avez pas, Sudo apt install xclip xdotool, wmctrl
  6. Yay! J'étais trop paresseux pour Control+Shift+T et lancez source /.../bin/activate mais je peux maintenant faire 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

Testé avec Ubuntu 18.0.4, GNOME 3.28.2 et cela fonctionne bien. xdotools 3.20160805.1, xclip 0.12, wmctrl 1.07, mais je ne pense pas vraiment que cela importera beaucoup, n'est-ce pas?

Une partie du script est copiée à partir de this SO answer , comme indiqué dans le script lui-même.

1
Taegyung