Filtre en Python
L’objectif ici est de voir comment, en Python, écrire une commande ayant un comportement conforme au standard Unix.
1. Ebauche de filtre en Python
input() lit sur stdin et print() écrit sur stdout,
donc avec cela, il est possible de bricoler un filtre :
convertit le flux de données en majuscule
#!/bin/env python3
try:
while True:
line = input()
print(line.upper())
except EOFError:
pass
Plus pro, on peut utiliser les variables stdin et stdout du module sys :
upper.py
#!/bin/env python3
import sys
for line in sys.stdin:
sys.stdout.write(line.upper())
Mais malheureusement, cette commande n’a pas exactement le comportement standard d’une commande Unix :
$ cat /etc/passwd | ./upper.py # OK
$ ./upper.py < /etc/passwd # OK
$ ./upper.py /etc/passwd # NOT ok
Cette commande n’a toujours pas exactement le comportement standard d’une commande Unix car elle ne sait pas traiter plusieurs fichiers.