• # il y a une commande pour ça

    Posté par . En réponse au journal Le core utile. Évalué à 4.

    Dans mon cas elle s'appelle stdbuf.
    Merci pour ton post, je connaissais la majorité de ces commandes mais pas toues et une m'a attiré l'oeil : stdbuf.

    Dans ce post, j'écris mes déboire pour faire quelque chose qui me semblait très simple : transformer un script qui produit une ligne en sortie pour une ligne en entrée mais qui nécessite un init assez long en un service persistant tournant sur ma machine. Je pensais utiliser un pipe, voire une socket unix voire ip.

    Au final, la bonne réponse dans mon cas est bien un pipe. Mais quelle que soit la solution, je butais sur un problème : le script ne produit rien. En fait, il ne produit pas systématiquement une sortie pour une entrée : il bufferise. Ma solution a été d'ajouter un "sys.stdout.flush()" dans mon script appelé. Cependant, ce n'est pas très générique car si j'ai besoin de traiter des lignes en masse, je ne voudrai pas pénaliser les performances en flushant à chaque ligne.

    J'ai donc, à la suite de la lecture de ce post, reversé le contrôle en modifiant le script appelant par "stdbuf -oL ./script1.py".

    Cela fonctionne tout aussi bien tout en étant plus propre à mon goût.