A volte si ha bisogno di una funzione particolare che non è immediatamente ottenibile combinando i comandi usati più spesso nelle Pipe (more, grep, wc e così via).
Invece di cercare soluzioni, a volte complicate, in Internet possiamo scrivere rapidamente noi il programma!
Python prevede due file speciali per leggere dati dallo standard-input e scrivere i risultati nello standard-output e realizzare così in brevissimo tempo il comando che ci serve.
Entrambi i file sono definiti nel modulo sys e questo è ad esempio un programma che stampa sullo standard-output la riga più lunga di un file di testo il cui nome viene letto dallo standard-input:
#!/usr/bin/env python3
import sys
for file_name in sys.stdin:
max_line = ''
with open(file_name.strip(), 'r') as f:
for l in f:
l = l.rstrip()
if len(l) >= len(max_line):
max_line = l
sys.stdout.write(f'{max_line}\n')
copiamo questo codice in un file, ad esempio longest_line.py
e rendiamolo eseguibile, ad esempio con il comando
$ chmod a+x longest_line.py
A questo punto possiamo usare il nostro programma come tutti gli altri comandi Unix che possono essere collegati tra di loro tramite Pipe.
Ad esempio possiamo scrivere:
$ ls *.txt | ./longest_line.py
per visualizzare la riga più lunga di ciascun file che si trova nella cartella corrente e il cui nome ha estensione .txt
.