Quelle est la meilleure solution pour emuler une série de pipes Unix sous Windows ?
Le
pioche encore
Bonjour,
Mon problème est le suivant :
J'étudie actuellement un produit de traitement de gros flux de
données qui posède une implémentation pour Unix et Windows.
La version Unix est principalement développée en Perl et fait
transiter le dit flux par différents filtres au moyen de pipes
système (rien que du traditionnel quoi).
La version windows est développée en BZZZZ (peu importe mais c'est
basé sur l'API WIN32) et fait transiter le flux par des fichiers
temporaires traités par des appels systèmes aux filtres (des .exe).
Le pb est que l'ouverture et la fermeture séquentielle des fichiers
rend la vesion Windows est plus lente et plus gourmande en espace
de stockage (un répertoire par phase de traitement).
Or si je veux adapter le processus Unix à la version Windows il me
faut résoudre le problème de la gestion des pipes qui me semble t'il
n'est pas asynchrone en mode 'commande' (le fichier stdin est lu
intégralement avant de produire sur stdout).
D'ou ma question : est il cohérent d'utiliser les pipes sous un batch
(du type cmd.exe/dos-oui-je-sais-ca-n-existe-plus)
sous Windows comme on le ferait dans un shell Unix ?
Y'a t'il une alternative aux pipes avec Perl sous Windows ?
suivi sur fr.comp.lang.perl
Mon problème est le suivant :
J'étudie actuellement un produit de traitement de gros flux de
données qui posède une implémentation pour Unix et Windows.
La version Unix est principalement développée en Perl et fait
transiter le dit flux par différents filtres au moyen de pipes
système (rien que du traditionnel quoi).
La version windows est développée en BZZZZ (peu importe mais c'est
basé sur l'API WIN32) et fait transiter le flux par des fichiers
temporaires traités par des appels systèmes aux filtres (des .exe).
Le pb est que l'ouverture et la fermeture séquentielle des fichiers
rend la vesion Windows est plus lente et plus gourmande en espace
de stockage (un répertoire par phase de traitement).
Or si je veux adapter le processus Unix à la version Windows il me
faut résoudre le problème de la gestion des pipes qui me semble t'il
n'est pas asynchrone en mode 'commande' (le fichier stdin est lu
intégralement avant de produire sur stdout).
D'ou ma question : est il cohérent d'utiliser les pipes sous un batch
(du type cmd.exe/dos-oui-je-sais-ca-n-existe-plus)
sous Windows comme on le ferait dans un shell Unix ?
Y'a t'il une alternative aux pipes avec Perl sous Windows ?
suivi sur fr.comp.lang.perl

Poser une question


Tiens, je n'avais jamais remarqué ca...
L'alternative a ce genre de chose est l'utilisation de TCP/IP.
C'est toi qui gere ce que tu lis et comment. Et en local, c'est
presque de la memoire partagée (c'est plutot un stream partagé).
En plusn la version en perl fonctionnera aussi sous Linux/MacOS.
Une idée comme ca. Doms.
Dominique Vaufreydaz a écrit :
[...]
En fait c'est improbable (au sens propre du terme). Sous cmd il est
difficile de faire tourner 2 processus en simultané (les sorties de
l'un alimentant les entrées de l'autre). En tout cas avec un batch ou
un script contenant une boucle infinie, le second processus de la queue
est définitivement pendu.
Oui ça remet pas mal de choses en cause dans l'existant mais il n'y a
peut être pas d'autres solutions. Je vais voir dans la doc de perl
pour Windows ce genre de problématique doit y être évoquée.