IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Découverte de l'interpréteur interactif IPython


précédentsommairesuivant

V. Les commandes magiques

Les commandes magiques sont un ensemble de commandes spécifiques à IPython précédées de '%'.

Autant dire que ces commandes constituent le « gros morceau » d'IPython.

Vous trouverez dans ce qui suit un inventaire des commandes magiques qui nous ont paru les plus pertinentes dans le cadre de cet article.

V-A. %alias

La commande %alias permet de définir un alias pour des commandes système.

Par exemple :

Création de la commande magique %alias
Sélectionnez
# Création de l"alias mon_dir
# Liste des fichiers *.sys du répertoire c:\tmp (récursif).
# Puis lancement de l'alias et affichage du résultat

In [86]: %alias mondir dir "c:\tmp\*.sys" /s /b

In [87]: mondir
IPython system call: dir "c:\tmp\*.sys" /s /b
c:\tmp\Medion\V.1.3.2.5\3xHybrid.sys
c:\tmp\msi\driver\Windows_2000\RT2500.SYS
c:\tmp\msi\driver\Windows_2000\rt2500usb.sys
c:\tmp\msi\driver\Windows_2000\RT61.sys
c:\tmp\msi\driver\Windows_98\RT25009X.SYS
c:\tmp\msi\driver\Windows_98\RT25U98.SYS
c:\tmp\msi\driver\Windows_98\RT619x.sys
c:\tmp\msi\driver\Windows_ME\RT25009X.SYS
c:\tmp\msi\driver\Windows_ME\RT25U98.SYS
c:\tmp\msi\driver\Windows_ME\RT619x.sys
c:\tmp\msi\driver\Windows_XP\RT2500.SYS
c:\tmp\msi\driver\Windows_XP\rt2500usb.sys
c:\tmp\msi\driver\Windows_XP\RT61.sys
c:\tmp\msi\driver\Windows_XPx64\rt2500.sys
c:\tmp\msi\driver\Windows_XPx64\rt2500usb.sys
c:\tmp\msi\driver\Windows_XPx64\rt61.sys

Vous pouvez aussi utiliser %s pour afficher les arguments passés lors de l'appel :

 
Sélectionnez
# Création de l'alias sayHello
# La commande est un echo avec 2 arguments (%s)
# Enfin lancement de la commande par l'alias et affichage du résultat


In [94]: %alias sayHello echo "Bonjour ton nom est %s et ton prenom est %s"

In [95]: sayHello Peyroux Jean
IPython system call: echo "Bonjour ton nom est Peyroux et ton prenom est Jean"

"Bonjour ton nom est Peyroux et ton prenom est Jean"

V-B. %bookmark

%bookmark vous permet de créer simplement un lien vers un répertoire.

 
Sélectionnez
# Créer un bookmark du répertoire courant :
%bookmark monBookmark

# Créer un bookmark sur le répertoire '/home/peyroux/Python'
%bookmark maHomePython /home/peyroux/Python

# Lister les bookmarks
%bookmark -l 

# Aller dans un répertoire "bookmarké" : 
%cd -b maHomePython

# Supprimer un bookmark : 
%bookmark -d <name> 

# Supprimer tous les bookmark : 
%bookmark -r

V-C. %cpaste

La commande %cpaste permet de coller du code python venant du presse papier afin de l'exécuter.

Une fois tout le code collé, il faut taper '--' pour provoquer l'exécution du contenu.

Un exemple : le code suivant vient d'un fichier texte.

 
Sélectionnez
monNom = "John Doe"
print monNom + "\n"
print monNom.upper()

Une fois copié dans le presse-papier, on colle dans la console IPython ces quelques lignes.

 
Sélectionnez
In [8]: %cpaste
Pasting code; enter '--' alone on the line to stop.

# J'ai fait le coller à cet endroit
:monNom = "John Doe"
:print monNom
:print monNom.upper()
:--
# Le résultat
John Doe
JOHN DOE

V-D. %dhist

La commande %dhist affiche la liste des répertoires visités durant la session courante

 
Sélectionnez
# Je vais dans le répertoire 'c:\Documents and Settings'
In [1]: cd c:\Documents and Settings\
c:\Documents and Settings

In [2]: cd c:\Documents and Settings\eric\Bureau\
c:\Documents and Settings\eric\Bureau

In [3]: cd
C:\Documents and Settings\eric

In [4]: %dhist
Directory history (kept in _dh)
0: C:\Documents and Settings\eric
1: c:\Documents and Settings
2: c:\Documents and Settings\eric\Bureau
3: C:\Documents and Settings\eric

V-E. %edit

Vous pouvez utiliser votre éditeur de texte favori avec IPython pour éditer des instructions tapées. Le code est alors placé dans l'éditeur puis exécuté lors de la fermeture de l'éditeur.

 
Sélectionnez
In [28]: age = 19

In [29]: if age >=18:
   ....:     print 'majeur'
   ....:
   ....:
majeur

In [30]: %ed 28 29
Ouverture de l'éditeur par défaut et ajout du code.
Ouverture de l'éditeur par défaut et ajout du code.

En exécutant %edit 2-3 vous allez lancer votre éditeur de texte. Les lignes 2 à 3 sont alors incluses dans l'éditeur et sont exécutées dans IPython après la fermeture.

Vous pouvez aussi utiliser la commande magique de la façon suivante :

 
Sélectionnez
%edit 2 8 10 21-25

Celle-ci éditera les lignes 2, 8 10 puis les lignes situées entre 21 et 25.

Pour ne pas exécuter le code après la fermeture de l'éditeur, utilisez l'argument -x

 
Sélectionnez
# Ouvre l'éditeur et place le code tapé dans IPython des lignes 1 à 4
In [12]: %ed -x 1-4

# Après fermeture le code n'est pas exécuté

Il est possible de modifier l'éditeur par défaut (notepad pour Windows) et d'entrer un éditeur personnalisé. Pour cela, il faut éditer le fichier ipythonrc.ini qui se trouve dans le répertoire c:\Documents and Settings\$monProfile\_ipython\ ou dans le répertoire de votre « home » pour les autres systèmes d'exploitation.

V-F. %exit, %quit

Ces deux commandes provoquent la sortie de IPython avec confirmation.

V-G. %history ou %hist

Cette commande permet d'afficher l'historique des commandes tapées dans IPython

Plusieurs utilisations possibles :

  • Sans argument : retourne les 40 dernières commandes tapées.
  • Un argument : retourne le nombre de commandes passé en argument.
  • Deux arguments : retourne les commandes tapées entre le premier et le deuxième argument.
 
Sélectionnez
# Affichage des 40 dernières lignes 
%hist
85 : _ip.system(r'dir "c:\tmp\*.sys" /s /b ')
86 : _ip.magic(r'%alias mondir dir "c:\tmp\*.sys" /s /b')
87 : _ip.system(r'dir "c:\tmp\*.sys" /s /b ')
88 : #?%alias
89 : _ip.magic('%alias sayHello echo "Bonjour %s"')
90 : _ip.system('echo "Bonjour eric" ')
...

# Affichage des 4 dernières lignes : 
%hist 4
13: _ip.magic("ls -al")
14: _ip.magic("pwd")
15: _ip.magic("cd $HOME")
16: _ip.magic("mutt")    

# Affichage des lignes 3 à 6  
%hist 3 6
3: _ip.system("dir /on ")
4: _ip.magic("cd ")
5: _ip.system("dir /on ")

V-H. %macro

%macro permet de définir une portion de code, de le stocker et de l'exécuter ultérieurement.

 
Sélectionnez
In[1]:nom = "Peyroux" 
In[2]: print nom 
In[3]: %macro maMacro 1-2 
In[4]: maMacro
# Résultat, la macro affiche : 
'Peyroux'

V-I. %lsmagic, %magic

%lsmagic permet d'obtenir la liste des commandes magiques disponibles.

 
Sélectionnez
In [22]: %lsmagic
Available magic functions:
%Exit  %Pprint  %Quit  %alias  %autocall  %autoindent  %automagic  %bg  %bookmar
k  %cd  %clear  %color_info  %colors  %cpaste  %debug  %dhist  %dirs  %ed  %edit
  %env  %exit  %hist  %history  %logoff  %logon  %logstart  %logstate  %lsmagic
 %macro  %magic  %p  %page  %pdb  %pdef  %pdoc  %pfile  %pinfo  %popd  %profile
 %prun  %psearch  %psource  %pushd  %pwd  %pycat  %quickref  %quit  %r  %rehash
 %rehashdir  %rehashx  %reset  %run  %runlog  %save  %sc  %store  %sx  %system_v
erbose  %time  %timeit  %unalias  %upgrade  %who  %who_ls  %whos  %xmode

Automagic is ON, % prefix NOT needed for magic functions.

%magic est le mode d'emploi détaillé de l'ensemble des commandes magiques.

 
Sélectionnez
IPython's 'magic' functions
===========================

The magic function system provides a series of functions which allow you to
control the behavior of IPython itself, plus a lot of system-type
features. All these functions are prefixed with a % character, but parameters
are given without parentheses or quotes.

NOTE: If you have 'automagic' enabled (via the command line option or with the
%automagic function), you don't need to type in the % explicitly.  By default,
IPython ships with automagic on, so you should only rarely need the % escape.

Example: typing '%cd mydir' (without the quotes) changes you working directory
to 'mydir', if it exists.

You can define your own magic functions to extend the system. See the supplied
ipythonrc and example-magic.py files for details (in your ipython
configuration directory, typically $HOME/.ipython/).

You can also define your own aliased names for magic functions. In your
ipythonrc file, placing a line like:
---Return to continue, q to quit---                

....

V-J. %logon, %logoff, %logstart

L'ensemble de ces commandes permet la prise en charge du log de l'historique des instructions tapées dans IPython.

%logstart permet de démarrer le log.

Le log est créé dans le répertoire courant. Par défaut il est automatiquement nommé 'ipython_log.py'.

Il est possible de spécifier autre emplacement et un autre nom pour le fichier de log :

 
Sélectionnez
%logstart -r 'c:\tmp\log.txt'

Plusieurs options sont possibles concernant le contenu du log :

Argument

Signification

-o

Affiche également le résultat des commandes

-r

Enregistrement brut, tout ce qui est tapé

-t

Affiche la date et l'heure devant chaque commande

Par exemple, à la suite des commandes suivantes tapées dans l'interpréteur IPython :

 
Sélectionnez
In [1]: %logstart -r 'c:\tmp\python.log'
Activating auto-logging. Current session state plus future input saved.
Filename       : c:\tmp\python.log
Mode           : backup
Output logging : False
Raw input log  : True
Timestamping   : False
State          : active

In [2]: print 'bonjour'
bonjour

In [3]: import os

In [4]: print os.sys.platform
win32

%logoff interromp temporairement le log des actions.

%logon redémarre un log suspendu.

Enfin, %logstate affiche l'état du log et le fichier dans lequel il est placé.

Si l'on ouvre le fichier 'c:\tmp\python.log', on obtiendra le résultat suivant :

Image non disponible
Contenu du fichier de log

V-K. %psearch

La commande %psearch permet la recherche poussée

usage
Sélectionnez
%psearch a* : Objets commençants par un a
%psearch -e builtin a* : Objets qui n'est pas dans le "builtin space" commençant par un a
%psearch a* function : Toutes les fonctions qui commences par un a
%psearch re.e* : Objets qui commencent par un e dans le module re
%psearch r*.e* : Objets qui commencent par un e dans un ou des modules commençant par un r
%psearch r*.* string : Toutes chaines (strings) dans un ou des modules commençant par un r
%psearch -c a* : [-c - Case sensitive] Liste les objets commençants par la minuscule 
%psearch -a _* : List des objets commençant par un underscore

sys.s*? est équivalent à %psearch sys.s*

Quelques exemples :

 
Sélectionnez
# Chercher tout objet contenu dans le module os et commençant par p
In [65]: %psearch os.g*
os.getcwd
os.getcwdu
os.getenv
os.getpid

# Chercher un module commençant par ft
In [60]: %psearch ft*
ftplib

# Chercher dans le module os une fonction commençant par get
In [63]: %psearch os.get* function
os.getenv

V-L. %psource

Par exemple, si vous voulez afficher la source de la méthode login() du module ftplib:

 
Sélectionnez
import ftplib
In [46]: %psource ftplib.FTP.login

Résultat :

Exemple de recherche dans le module ftplib
Exemple de recherche dans le module ftplib

V-M. %quickref

La commande %quickref affiche la documentation succincte de IPython :

 
Sélectionnez
IPython -- An enhanced Interactive Python - Quick Reference Card
================================================================

obj?, obj??, ?obj,??obj   : Get help, or more help for object
?os.p*           : List names in os starting with p

Example magic:

%alias d ls -F   : 'd' is now an alias for 'ls -F'
alias d ls -F    : Works if 'alias' not a python name
alist = %alias   : Get list of aliases to 'alist'

System commands:

!cp a.txt b/     : System command escape, calls os.system()
cp a.txt b/      : after %rehashx, most system commands work without !
cp ${f}.txt $bar : Variable expansion in magics and system commands
files = !ls /usr : Capture sytem command output
files.s, files.l, files.n: "a b c", ['a','b','c'], 'a\nb\nc'
cd /usr/share    : Obvious, also 'cd d:\home\_ipython' works

History:

_i, _ii, _iii    : Previous, next previous, next next previous input
_i4, _ih[2:5]    : Input history line 4, lines 2-4
exec _i81        : Execute input history line #81 again
_, __, ___       : previous, next previous, next next previous output
_dh              : Directory history
_oh              : Output history
%hist            : Command history

Autocall:

f 1,2            : f(1,2)
/f 1,2           : f(1,2) (forced autoparen)
,f 1 2           : f("1","2")
;f 1 2           : f("1 2")

%Exit:
        Exit IPython without confirmation.
%Pprint:
        Toggle pretty printing on/off.
%Quit:
        Exit IPython without confirmation (like %Exit).
%alias:
        Define an alias for a system command.
%autocall:
        Make functions callable without having to type parentheses.
%autoindent:
        Toggle autoindent on/off (if available).
%automagic:
        Make magic functions callable without having to type the initial %.
%bg:
        Run a job in the background, in a separate thread.
%bookmark:
        Manage IPython's bookmark system.
%cd:
        Change the current working directory.
%clear:
         Clear various data (e.g. stored history data)
%color_info:
        Toggle color_info.
%colors:
        Switch color scheme for prompts, info system and exception handlers.
%cpaste:
        Allows you to paste & execute a pre-formatted code block from clipboar
%debug:
        Activate the interactive debugger in post-mortem mode.
%dhist:
        Print your history of visited directories.
%dirs:
        Return the current directory stack.
%ed:
        Alias to %edit.
%edit:
        Bring up an editor and execute the resulting code.
%env:
        List environment variables.
%exit:
        Exit IPython, confirming if configured to do so.
%hist:
        Alternate name for %history.
%history:
        Print input history (_i<n> variables), with most recent last.
%logoff:
        Temporarily stop logging.
%logon:
        Restart logging.
%logstart:
        Start logging anywhere in a session.
%logstate:
        Print the status of the logging system.
%lsmagic:
        List currently available magic functions.
%macro:
        Define a set of input lines as a macro for future re-execution.
%magic:
        Print information about the magic function system.
%p:
        Just a short alias for Python's 'print'.
%page:
        Pretty print the object and display it through a pager.
%pdb:
        Control the automatic calling of the pdb interactive debugger.
%pdef:
        Print the definition header for any callable object.
%pdoc:
        Print the docstring for an object.
%pfile:
        Print (or run through pager) the file where an object is defined.
%pinfo:
        Provide detailed information about an object.
%popd:
        Change to directory popped off the top of the stack.
%profile:
        Print your currently active IPython profile.
%prun:
        Run a statement through the python code profiler.
%psearch:
        Search for object in namespaces by wildcard.
%psource:
        Print (or run through pager) the source code for an object.
%pushd:
        Place the current dir on stack and change directory.
%pwd:
        Return the current working directory path.
%pycat:
        Show a syntax-highlighted file through a pager.
%quickref:
         Show a quick reference sheet
%quit:
        Exit IPython, confirming if configured to do so (like %exit)
%r:
        Repeat previous input.
%rehash:
        Update the alias table with all entries in $PATH.
%rehashdir:
         Add executables in all specified dirs to alias table
%rehashx:
        Update the alias table with all executable files in $PATH.
%reset:
        Resets the namespace by removing all names defined by the user.
%run:
        Run the named file inside IPython as a program.
%runlog:
        Run files as logs.
%save:
        Save a set of lines to a given filename.
%sc:
        Shell capture - exécute a shell command and capture its output.
%store:
        Lightweight persistence for python variables.
%sx:
        Shell execute - run a shell command and capture its output.
%system_verbose:
        Set verbose printing of system calls.
%time:
        Time execution of a Python statement or expression.
%timeit:
        Time execution of a Python statement or expression
%unalias:
        Remove an alias
%upgrade:
         Upgrade your IPython installation
%who:
        Print all interactive variables, with some minimal formatting.
%who_ls:
        Return a sorted list of all interactive variables.
%whos:
        Like %who, but gives some extra information about each variable.
%xmode:
        Switch modes for the exception handlers.

V-N. %run

%run exécute un script python.

 
Sélectionnez
Usage : %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]

Exemple d'utilisation courante des différents arguments :

  • -t : Pour retourner le temps CPU
  • -d : Pour lancer le débogage pdb
  • -b 40 : Pour commencer le débogage ligne 40

V-O. %save

%save ressemble en tout point à la commande %edit mais au lieu d'éditer des commandes IPython, ces dernières sont sauvegardées dans un fichier.

 
Sélectionnez
%save monFichier 2 8 10-13

Sauvegarde dans monFichier.py les lignes 2, 8 et les lignes situées entre 10 et 13.

Par défaut, le fichier est enregistré dans votre home. Il est possible de spécifier un chemin, reprenons l'exemple précédent :

 
Sélectionnez
In [40]:  %save "c:\tmp\monFichier.py" 28 29
   ....:
The following commands were written to file `c:\tmp\monFichier.py`:
age = 19
if age >=18:
    print 'majeur'

V-P. %store

%store permet une prise en charge « allégée » de la persistance des variables créées dans l'interpréteur IPython (dans la documentation : Lightweight persistence for python variables).

L'usage :

 
Sélectionnez
%store          - Show list of all variables and their current values
%store <var>    - Store the *current* value of the variable to disk
%store -d <var> - Remove the variable and its value from storage
%store -z       - Remove all variables from storage
%store -r       - Refresh all variables from store (delete current vals)
%store foo >a.txt  - Store value of foo to new file a.txt
%store foo >>a.txt - Append value of foo to file a.txt\

Quelques exemples d'utilisation :

 
Sélectionnez
In[1]: nom = "Jean" 
In[2]: %store nom

Après avoir quitté IPython, vous pourrez retrouver votre variable sauvée précédemment :

 
Sélectionnez
    In[1]: print nom affiche "Jean"

%store permet également de stocker d'autres types de variables comme des listes, des objets …

 
Sélectionnez
In [137]: listeDuPathCourant = !dir c:\tmp\garmin\*.* /b
IPython system call: dir c:\tmp\garmin\*.* /b
 ==
['016901000370.rgn', '042003600370.rgn', 'UPDATE.TXT', 'Updater.exe']

In [138]: %store listeDuPathCourant
Stored 'listeDuPathCourant' (SList)

Il est également possible d'afficher la liste des éléments stockés en tapant simplement %store

 
Sélectionnez
In [139]: %store
Stored variables and their in-db values:
listeDuPathCourant             -> ['016901000370.rgn', '042003600370.rgn', 'UPDA
TE.T
monNom                         -> 'Jean Peyroux'
 
Sélectionnez
#efface une variable 
%store -d monNom

V-Q. %who, %whos

%who retourne la liste les variables en mémoire pour la session courante et des variables et objets persistants.

 
Sélectionnez
In [31]: who
listeDuPathCourant      monLs   monNom

%whos liste détaillée des variables en mémoire de la session courante. Les types et les valeurs sont spécifiés.

 
Sélectionnez
In [32]: whos
Variable             Type     Data/Info
---------------------------------------
listeDuPathCourant   SList    ['016901000370.rgn', '042<...>DATE.TXT', 'Updater.
exe']
monLs                SList    ['']
monNom               str      Jean Peyroux

précédentsommairesuivant

Copyright © 2007 Eric POMMEREAU Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.