Bibliothèque standard
Bibliothèques utilitaires
1. Fonctions utilitaires
a. Afficher avec print
La fonction print() permet, par défaut, d’afficher une ou plusieurs valeurs sur la sortie standard (stdout). Ces valeurs sont implicitement converties en chaîne de caractères à l’aide de la fonction str() qui appellera la méthode __str__() de l’objet à afficher.
L’utilisation la plus simple de print
print(VALEUR)
Cette fonction dispose de différentes options destinées à indiquer le descripteur de fichier sur lequel écrire, le séparateur de valeurs et le suffixe à ajouter. Les valeurs par défaut du séparateur et du suffixe sont l’espace et le retour à la ligne.
Un en-tête plus complet
print(VALEUR1, VALEUR2, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
L’argument sep indique le séparateur, end le suffixe et file le descripteur de fichier.
>>> print ("toto", "titi")
toto titi
>>> print ("toto", "titi", sep ":v, end "\n\n", file=sys.stdout)
# Affichage de deux valeurs de type chaînes de caractères séparées
par ":" avec deux retours à la ligne à la fin.
toto:titi
Le paramètre flush, quant à lui, indique, s’il vaut True, qu’il faut mettre à jour le descripteur de fichier immédiatement après l’exécution de la fonction print.
On peut facilement observer un des comportements du cache d’écriture sur les sorties standard et sorties d’erreur (stdout et stderr) affichées dans une console. Le comportement par défaut (avec flush=False) est d’attendre un retour à la ligne pour mettre la sortie à jour. L’argument flush permet de forcer une mise à jour immédiate.
Comportement de l’argument flush
La différence des exemples suivants est visible lors de l’exécution dans un interpréteur interactif.
>>> import time
>>> for elem in range(3):
... print(elem, end=' ', flush=False)
... time.sleep(1)
...
0 1 2
>>>
>>> for elem in range(3):
... print(elem, end=' '...
Opérations de base sur un système de fichiers
1. Se déplacer et explorer l’arborescence des dossiers
a. Les chemins d’accès : les paths
Les systèmes d’exploitation inspirés par UNIX partagent leur fonctionnement au niveau de l’organisation des fichiers et des dossiers. L’ensemble des objets accessibles sont regroupés au sein d’une seule structure arborescente. Il existe donc une racine unique à cet arbre, noté avec le caractère barre oblique « / » (slash en anglais). Les fichiers ou dossiers sont ensuite identifiés au sein de cet arbre avec des « chemins d’accès » (path en anglais).
Ces chemins représentent l’ensemble des répertoires parcourus depuis la racine jusqu’au nom de l’objet désigné (fichier ou dossier). Les répertoires sont séparés par des barres obliques « / ».
Le caractère barre oblique « / » a deux significations dans un chemin : le premier caractère « / » désigne la racine, les autres sont des séparateurs de dossiers.
Un chemin d’accès
/home/user/exemple
Désigne un objet (fichier, dossier ou lien) nommé exemple, contenu dans un dossier « user » lui-même contenu dans un dossier « home ». Ce dernier est, quant à lui, « à la racine » : il est un sous-dossier de « slash ».
b. Le dossier courant cwd et le déplacement dans l’arborescence
Le dossier courant (en anglais Current Working Directory abrégé cwd) est un élément de contexte fondamental dans l’évaluation des chemins (paths). Il existe en réalité deux formes de chemins : absolus et relatifs. Les chemins absolus (vus dans la section précédente) décrivent l’ensemble du parcours de « la racine » au dossier contenant l’objet désigné.
Un chemin qui commence par une barre oblique « / » est donc un chemin absolu.
Les chemins relatifs sont, comme leur nom l’indique, relatifs au cwd. Ils commencent par le caractère « . »....
Opérations de base sur le réseau
1. TCP/UDP
a. Python et les sockets
Les sockets sont les abstractions qui représentent les extrémités de canaux de communications logiciels. Le terme socket peut être traduit par « prise », dans le sens « qui permet un branchement ». La création d’un socket requiert trois arguments : le domaine, le type et le protocole. Le domaine, aussi appelé famille, désigne une famille de protocoles regroupant un domaine d’application. Cet argument peut désigner les « sockets Unix » (AF_UNIX) pour la communication entre processus sur une même machine, les domaines IPv4 (AF_INET) ou IPv6 (AF_INET6), ou des domaines plus ésotériques tels que X25 (AF_AX25) dédiés à la radioamateur.
Les sockets UNIX peuvent être comparés à des pipes bidirectionnels. Là où un pipe a une entrée et une sortie (respectivement en écriture et en lecture seule), les sockets UNIX permettent aux deux participants d’envoyer et de recevoir via cet unique canal. D’autres nuances plus subtiles existent, mais ne seront pas abordées ici.
Pour ne citer qu’eux, TCP et UDP sont regroupés dans les familles IP (Internet Protocol). Lors de la création d’un socket, ils sont désignés par leur type, attendu en second argument. Il décrit le mode de communication. Par exemple, le type flux (SOCK_STREAM) permet la création d’un socket bidirectionnel avec connexion explicite (et donc détection de la perte de connexion) et un mécanisme de détection et correction d’erreurs.
Dans les familles IPv4 et IPv6, le seul protocole de ce type est TCP.
À l’opposé, le type datagramme (SOCK_DGRAM) désigne un mode sans connexion explicite et sans contrôle des erreurs dont le seul représentant dans les familles IP est UDP.
Le dernier argument, le protocole, permet de sélectionner un protocole dans un type d’une famille donnée. Dans le cas de TCP/IP et UDP/IP, cet argument sera toujours zéro.
Le module socket
C’est ce module qui donne accès à une interface de manipulation des sockets. Il contient un ensemble de constantes désignant les familles et les types de protocoles....