IV. Interaction avec le shell▲
Bien que l'équipe d'IPyhton ne le considère pas comme un « véritable » shell système, IPython peut néanmoins constituer une alternative pertinente à votre shell.
Pour lancer IPython en mode shell, il vous suffit de l'exécuter avec les arguments suivants : -p pysh . Ceci exécute le mode « InterpreterExec » de IPython.
Sous Windows, l'installation de IPython place deux raccourcis dans Démarrer > Programmes > IPython.
Le raccourci pysh lance IPython en mode shell.
Pour obtenir le même résultat en ligne de commande, tapez : C:\Python25\python.exe C:\Python25\scripts\ipython -p sh.
L'équipe de IPython ne considère pas le mode InterpreterExec comme shell mais plutôt comme un ajout de fonctionnalités et l'apport d'un prompt customisé pour la navigation dans le système de fichiers (comme dans un shell unix). Par ailleurs le mode -pysh permet accès aux opérateurs $ et $$ pour la capture de la sortie d'une commande système.
On ne peut pas parler de shell au sens strict, bien des options manquent. Par exemple [ctrl-z] suspendra le processus de IPython et non plus celui qui « tourne » dans la console.
IV-A. Exécution d'une commande shell avec l'opérateur '!'▲
Utilisons la commande système dir (pour lister le répertoire 'c:\tmp').
In [1
]: !
dir c:\tmp
Cette commande a pour effet de lancer la commande système dir c:\tmp et d'afficher la sortie de cette commande dans la console
Si vous voulez « capturer » la sortie de votre commande shell sous forme de séquence (tableau), utilisez alors !!. Exemple d'utilisation :
In [5
]: !!
dir c:\tmp
La commander !!dir permet de récupérer la sortie de la commande comme une séquence Python.
Attention, l'affichage du résultat de ce type de commande (opérateur !!) peut légèrement différer des copies d'écran.
Il est également possible de récupérer le contenu du retour en utilisant le numéro de la ligne de commande préfixé par un blanc souligné (underline).
Par exemple, nous allons mettre le résultat de notre !!dir de la ligne 23 dans une variable :
monDir =
_5
print
monDir
# Affiche le résultat du !!dir c:\tmp
On peut aussi récupérer directement le résultat d'une commande système en faisant :
maVarDir =
!
dir c:\tmp
Pour afficher le contenu de ce que l'on a récupéré :
In [19
]: for
line in
maVarDir:
....: print
line
....:
Le résultat de ces instructions :
IV-B. Capture de la sortie standard d'une commande avec $ et $$▲
Lorsque IPython est lancé en mode shell (argument -p pysh), il est possible de récupérer le contenu d'une commande système dans une variable préfixée par $ ou $$.
Le symbole $ permet la capture de la sortie d'une commande système sous forme de texte :
Un exemple sous Linux :
$monLs =
ls
print
monLs
Desktop
Documents
Library
À la différence du symbole précédent, $$ récupère la sortie sous la forme d'une séquence :
peyroux@lapy[~
]|
28
>
$$monLs =
ls
print
monLs
['Desktop'
, 'Documents'
, 'Library'
, 'Movies'
, 'Music'
, 'Pictures'
, 'Public'
, 'Sites'
, 'opt'
]
Cela permet de traiter le résultat de votre commande shell comme bon vous semble :
# Afficher chaque ligne de la séquence
for
fichier in
monLs :
|
..>
print
fichier
Cette commande affiche sur une ligne chaque entrée de la séquence.
IV-C. Navigation dans le système de fichiers▲
Partons de l'arborescence suivante :
Il est possible de se déplacer facilement dans le système de fichiers en utilisant le début d'un nom de répertoire ou de fichier.
Par exemple avec la commande suivante :
%
cd c:/
Article_Dvp/
c[TAB]
On obtient les deux répertoires se trouvant dans c:\article_dvp qui commencent par la lettre 'c':
Idem pour les fichiers ou avec la commande suivante :
%
edit c:/
Article_Dvp/
Cache/
introduction-
ipython/
i[TAB]
On obtient :