Vous êtes sur la page 1sur 28

Python tout faire:

de ladministration systme
aux applications graphiques 3D
Fernando Nio IRD/Legos/OMP
Les langages ...

Une machine de Turing peut simuler nimporte quelle fonction


trouve dans les langages de programmation, y compris des
procdures rcursives et tout mcanisme de passage de
paramtres
John Hopcroft and Jeffrey Ullman, (1979).
Introduction to Automata Theory, Languages and Computation,
1st edition, Addison-Wesley, Reading Massachusets

Tous les langages de programmation sont quivalents

Tring-complets: C, Perl, ADA, Fortran, Python, Cobol, ...


Non Tring-complets: SQL, expressions rationnelles
Python et les compromis

Pouvoir crire facilement (expressivit);

float **A;
int M=30, N=20;
import numpy
A=calloc(M,sizeof(float *));
A=numpy.ones(M,N)
for (int i=0; i < M; i++) {
A[i] = calloc(N,sizeof(float));
for (int j=0; i < N; j++)
A[i][j] = 1;
}

Evidemment cela dpend du domaine, et des librairies disponibles

Python est livr en standard avec une fouletitude de librairies


(rseau, web, I/O, multithreading...)
Python et les compromis

Etre performant ... en quoi ?


A lxcution ???
rien ne vaut de lassembleur optimis la main !

?
Python et les compromis

Etre performant... lexcution ?


Oui, mais encore il faut optimiser ce quil doit ltre. La loi de
Pareto peut tre invoque (80% du problme est d au 20% du
code). Il faut identifier les goulots dtranglement

Etre performant pendant le dveloppement / la maintenance ?


Cela dpend du domaine dapplication (on ne gre pas un site web
comme on gre un logiciel dacquisition satellite embarqu), mais
vu la dure de vie dune application la facilit de dveloppement
est importante
Python sadapte aux systmes

La performance sobtient en sachant sadapter:


aux systmes Python est conu ds le dpart pour lintgration
interprt, avec introspection (le code peut se voir lui-mme)
import numpy
if numpy.__version__ == '1.5.0':
apply_patch()

facilement tendu (SWIG ...)


Python et le peopleware

Plus que le hardware ou le software, le facteur humain est


essentiel
faciliter la comprhension (viter les candidats lObfuscated Perl
Contest) et le code write-only
#:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :||
open(Q,$0);while(<Q>){if(/^#(.*)$/){for(split('-',$1)){$q=0;for(split){s/\|
/:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print chr($q);}}}print"\n";
#.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|

Python a un hritage C, comme beaucoup dautres langages, il est


donc facilement lisible, avec lindentation significative (its not a
bug, its a feature !)
def lire(monfichier):
f=open(monfichier,r)
for ligne in f.readlines():
print ligne

Gestion automatique de mmoire vite beaucoup de problmes !


Le langage Python

Cest un langage dynamique:


toutes les instructions sont excutes au fur et mesure, y
compris les dclarations.
import sys # Module daccs au systeme
Instruction print sys.path
monchemin=/sw/lib/
Commentaire
sys.path.append(monchemin)
print sys.path
on peut modifier le chemin de recherche de modules, comme avec
PYTHONPATH.
Variable
Cest un langage o lindentation est significative
import sys
print sys.path #---> ERREUR de syntaxe
Python la forme (indentation)
Lindentation est celle de lutilisateur: n espaces dindentation.
Cest bien: ce quon voit est ce quil xecute (pas de problme
daccolade ferme trop tt comme en C...)

for(i=0; i < n; i++) {


for (j=0; j < n; j++)
x=x*j;
y=y*i+j;
}
pige
for i in range(0,n):
for j in range(0,n):
x=x*j
y=y*i+j
Python les types

Python est un langage faiblement typ


Donc, le type dune variable dpend de son contenu
i=10 # i est un entier
i=voici # i est une chane de caractres

Pour avoir des informations sur un objet:


Son type
type(i)
De quoi est-il capable (mthodes applicables) ?
dir(i)

Virgule flottante , nombres complexes


x=0.001
y=1.2E-9
u=5j
v=3 + 4.5j
Python squences et dictionnaires

Tuples
Ce sont des squences qui ont des lments htrognes
ils ne peuvent pas tre modifis
donc, copie si modification ncessaire

In [20]: tuple=('un',1,'deux',2)
In [21]: tuple[2]='3'
---------------------------------
exceptions.TypeError
Traceback (most recent call last)
Python les listes

La seule squence modifiable est la liste:


Comme le tuple, mais se cr avec des [ ]

liste=[] # vide
liste = range(0,100) # gnre 0, 1, 2, 3, ... 99

Oprations interessantes:
liste.append(element)
liste.extend(liste2)
liste.insert(position,element)
liste.remove(element)
liste.pop(position)
liste.index(element)
liste.count(element)
liste.sort()
Python les dictionnaires

Dictionnaires ou hash arrays ou associative arrays. Ce sont


des associations de cls et valeurs
In [23]: dict={'a':1, 'b':2, 'c':None }
In [24]: dict
Out[24]: {'a': 1, 'c': None, 'b': 2}

Remarquez que lordre est quelconque

Pour le parcourir
In [25]: dict.keys()
Out[25]: ['a', 'c', 'b']
In [26]: dict.values()
Out[26]: [1, None, 2]
In [27]: dict['b']
Out[27]: 2
Python objet

Encapsulation
Structure de donnes va ensemble avec ses procdures de
traitement
liste.append(element)

Hritage
Eviter la duplication de code
fichier
fichierZip
fichierTexte
Surcharge
Un mme nom pour diffrentes fonctions (distingues par
contexte - ou signature)
mafonction(a,b,c) / mafonction(a)
a nexiste pas en Python ! Un seul nom admis !
Morceaux choisis
Administration Systme

Distributions linux
Python is pervasive in Fedora. Everything from yum to system-
config-* to anaconda to pungi is written in Python.
http://fedoraproject.org/wiki/Features/Python_2.6

Analyse forensique
Python Volatility (https://www.volatilesystems.com/default/volatility)
analyse des dumps mmoire pour obtenir des informations sur:
Image date and time / Running processes/ Open network sockets / Open network connections / DLLs loaded for each
process / Open files for each process / Open registry handles for each process / A process' addressable memoryOS
kernel modules / Mapping physical offsets to virtual addresses (strings to process) / Virtual Address Descriptor
information / Scanning examples: processes, threads, sockets, connections,modules / Extract executables from memory
samples / Transparently supports a variety of sample formats (ie, Crash dump, Hibernation, DD) / Automated conversion
between formats
Administration Systme le shell

Remplacement de scripts shell


Pourquoi ? Bash et consorts est trs limit, avec une gestion
derreurs trs minimaliste, la C (vrifier le code e retour chaque
fois).
try:
# tout un bloc

except:
# gestion de lerreur

Construction de modules, organiss de faon cohrente


Administration systme - example

Vrification de mots de passe


import pwd

#initialize counters
erroruser = []
errorpass = []

#get password database


passwd_db = pwd.getpwall()

try:
#check each user and password for validity
for entry in passwd_db:
username = entry[0]
password = entry [1]
if len(username) < 6:
erroruser.append(username)
if len(password) < 8:
errorpass.append(username)

print "The following users have an invalid userid (less than


six characters):"
for item in erroruser:
print item
print "\nThe following users have invalid password(less than
eight characters):"
for item in errorpass:
print item
except:
print "There was a problem running the script."
Python Web et rseaux

Serveur web inclus dans Python

import SimpleHTTPServer
import SocketServer

PORT = 8000

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler

httpd = SocketServer.TCPServer(("", PORT), Handler)

print "serving at port", PORT


httpd.serve_forever()
Python Web Le CMS Plone

Systme de gestion de contenu web: Plone + Deliverance


Python Web et calcul scientifique
Python Bases de Donnes

La srialisation Python: pickle


import pickle

data1 = {'a': [1, 2.0, 3, 4+6j],


'b': ('string', u'Unicode string'),
'c': None}

selfref_list = [1, 2, 3]
selfref_list.append(selfref_list)

output = open('data.pkl', 'wb')

# Pickle dictionary using protocol 0.


pickle.dump(data1, output)
import pprint, pickle
# Pickle the list using the highest protocol
available. pkl_file = open('data.pkl', 'rb')
pickle.dump(selfref_list, output, -1)
data1 = pickle.load(pkl_file)
output.close() pprint.pprint(data1)

data2 = pickle.load(pkl_file)
pprint.pprint(data2)

pkl_file.close()
Python et bases de donnes

PostgreSQL, ....
try:
self.conn = psycopg2.connect(dsn)
self.conn.set_isolation_level(ISOLATION_LEVEL_READ_COMMITTED)
self.cur = self.conn.cursor()
except:
print "Unable to connect to database with dsn %s" % dsn
raise

#...

sql = "UPDATE CYCLE SET cycle_startdate = %s, cycle_enddate = %s WHERE cycle_id =


%d" % \
(adapt(mind), adapt(maxd), cycle_id)
self.cur.execute(sql)
self.conn.commit()
Python Applications Scientifiques

Numpy pour remplacer Matlab


Syntaxe trs proche de matlab from mpl_toolkits.mplot3d import Axes3D
import matplotlib
Primitives graphiques (matplotlib) import numpy as np
from matplotlib import cm
calques de Matlab from matplotlib import pyplot as plt
step = 0.04
maxval = 1.0
fig = plt.figure()
La logique: vectoriser les calculs, ax = fig.add_subplot(111, projection='3d')

utilisant des librairies C/C++ au # create supporting points in polar coordinates


r = np.linspace(0,1.25,50)
mieux (i.e. lapack). De ce fait, les p = np.linspace(0,2*np.pi,50)
performances sont trs bonnes: R,P = np.meshgrid(r,p)
# transform them to cartesian system
linterface est gre par Python, les X,Y = R*np.cos(P),R*np.sin(P)

calculs lourds sont faits par des Z = ((R**2 - 1)**2)


ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
librairies optimises. cmap=cm.jet)
ax.set_zlim3d(0, 1)
Exemple: ax.set_xlabel(r'$\phi_\mathrm{real}$')
ax.set_ylabel(r'$\phi_\mathrm{im}$')
Vens, un micro-satellite pour ax.set_zlabel(r'$V(\phi)$')
ax.set_xticks([])
surveiller la vgtation et plt.show()

l'environnement: maquettage Python


Example de visualisation 3D mayavi/ matplotlib
Applications Graphiques

Blender privilgie Python pour extensions


Interaction avec SIG, DAP, etc.

DAP: Data Access Protocol :


extraction de donnes en
ligne avec des critres de
slection spatiotemporels
Conclusion

Python est un langage trs complet fournit avec beaucoup de


librairies:
traitement des exceptions : gestion lgante des erreurs
conception oriente objet : modularit, encapsulation
facile lire, facile maintenir
permet dintgrer beaucoup de solutions disparates
Mode de dveloppement en boucle courte:
coder par petits morceaux
tester
intgrer
tests dintgration
Un langage pour beaucoup de choses:
traitement de donnes (fichiers/bases de donnes)
visualisation (2D/3D, IHM, rapports)
aussi laise ct serveur que ct client

Vous aimerez peut-être aussi