====== Python ======
[[http://www.python.org/|Python]] est un langage de programmation doté d'une syntaxe concise et rigoureuse forte appréciée dans l'apprentissage d'un langage.
===== Décomposer les différents éléments d'une URL =====
Python est capable de décomposer les différents éléments qui constitue une URL. Nous allons prendre comme exemple : **https://api.github.com/repos/shazow/urllib3**
Sous un session interactive (''python3'') en « important » le module [[https://docs.python.org/3/library/urllib.parse.html|urllib.parse]] (ce module est présent en standard) :
>>> import urllib.parse
>>> url = 'https://api.github.com/repos/shazow/urllib3'
>>> p = urllib.parse.urlparse(url)
>>> p
ParseResult(scheme='https', netloc='api.github.com', path='/repos/shazow/urllib3', params='', query='', fragment='')
>>> print(p.netloc)
api.github.com
>>>
Cette fois-ci avec le module [[https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html|urllib3.util.url]]. Il vous faudra installer le paquet urllib3 ((Ce module est incorporé directement dans [[http://docs.python-requests.org/en/master/|Requests]])).
>> import urllib3.util
>>> url = 'https://api.github.com/repos/shazow/urllib3'
>>> p = urllib3.util.url.parse_url(url)
>>> p
Url(scheme='https', auth=None, host='api.github.com', port=None, path='/repos/shazow/urllib3', query=None, fragment=None)
>>> print(p.host)
api.github.com
>>>
On retrouve les différents éléments
===== Les sockets UNIX =====
Les sockets UNIX utilisent le système de fichiers pour communiquer entre deux processus. On parle de client / serveur.
Ci-dessous un exemple de **serveur** (dans une session interactive).
>>> import os
>>> import socket
>>> s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
>>> sock_file = os.path.join('/tmp/', 'socket_01')
>>> s.bind(sock_file)
>>> s.listen(1)
>>> conn, addr = s.accept()
À ce niveau là, nous n'avons plus la « main », il faut connecter un **client**.
>>> import os
>>> import socket
>>> s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
>>> socket_file = os.path.join('/tmp/', 'socket_01')
>>> s.connect(socket_file)
Nous avons de nouveau la « main » sur le **serveur**. On continue le programme.
>>> while True:
... data = conn.recv(1024)
... if data:
... print data
...
Avec le **client**, nous pouvons envoyer des données.
>>> s.send('!system=DEVFS subsystem=CDEV type=MEDIACHANGE cdev=cd0')
54
>>>
Sur le **serveur**, une ligne apparaît.
!system=DEVFS subsystem=CDEV type=MEDIACHANGE cdev=cd0
Pour mettre fin à la session, sur le **client**
>>> s.close()
===== Fin de ligne =====
Lorsque l'on doit écrire plusieurs lignes dans un fichier, il faut penser aux [[http://fr.wikipedia.org/wiki/CRLF|retours à la ligne]]. Ils sont interprétés de manières différentes suivant le système d'exploitation.
Cependant on peut utiliser la chaîne de caractères ''os.linesep'', qui va traduire les fin de ligne en fonction du système d'exploitation, dans lequel le code sera exécuter.
>>> import codecs
>>> import os
>>> filename = 'fichier.txt'
>>> with codecs.open(filename, 'w', 'utf-8') as f:
... f.write(u'Première ligne%s' % os.linesep)
... f.write(u'Deuxième ligne%s' % os.linesep)
...
>>> f.close()
>>>
Ce qui donne ceci :
$ cat fichier.txt
Première ligne
Deuxième ligne
$