OVH Cloud OVH Cloud

Quelle est la meilleure solution pour emuler une série de pipes Unix sous Windows ?

6 réponses
Avatar
pioche encore
Bonjour,
Mon probl=E8me est le suivant :
J'=E9tudie actuellement un produit de traitement de gros flux de
donn=E9es qui pos=E8de une impl=E9mentation pour Unix et Windows.
La version Unix est principalement d=E9velopp=E9e en Perl et fait
transiter le dit flux par diff=E9rents filtres au moyen de pipes
syst=E8me (rien que du traditionnel quoi).
La version windows est d=E9velopp=E9e en BZZZZ (peu importe mais c'est
bas=E9 sur l'API WIN32) et fait transiter le flux par des fichiers
temporaires trait=E9s par des appels syst=E8mes aux filtres (des .exe).
Le pb est que l'ouverture et la fermeture s=E9quentielle des fichiers
rend la vesion Windows est plus lente et plus gourmande en espace
de stockage (un r=E9pertoire par phase de traitement).
Or si je veux adapter le processus Unix =E0 la version Windows il me
faut r=E9soudre le probl=E8me de la gestion des pipes qui me semble t'il
n'est pas asynchrone en mode 'commande' (le fichier stdin est lu
int=E9gralement avant de produire sur stdout).
D'ou ma question : est il coh=E9rent 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

6 réponses

Avatar
Remi THOMAS
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



Bonjour,
Je te propose de jeter un oeil au PowerShell
http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx

pas mal d'info ici:
http://channel9.msdn.com/wiki/default.aspx/Channel9.WindowsPowerShellWiki

Rémi

Avatar
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



Bonjour,
Je te propose de jeter un oeil au PowerShell
http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx

pas mal d'info ici:
http://channel9.msdn.com/wiki/default.aspx/Channel9.WindowsPowerShellWiki



Merci Rémi, très intéressant ...
mais le pré-requis c'est Perl. Techniquement je ne pense pas que
PowerShell soit portable sur Unix ou alors j'ai pas tout compris c'est
possible. Mais quand bien même il le serait je ne me vois pas ré
écrire quelques milliers de lignes de code pour régler le problème.
En attendant je mets ça dans mes favoris pour plus tard.

A+
P.


Avatar
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



Bonjour,
Je te propose de jeter un oeil au PowerShell
http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx

pas mal d'info ici:
http://channel9.msdn.com/wiki/default.aspx/Channel9.WindowsPowerShellWiki




Merci Rémi, très intéressant ...
mais le pré-requis c'est Perl. Techniquement je ne pense pas que
PowerShell soit portable sur Unix ou alors j'ai pas tout compris c'est
possible. Mais quand bien même il le serait je ne me vois pas ré
écrire quelques milliers de lignes de code pour régler le problème.
En attendant je mets ça dans mes favoris pour plus tard.

A+
P.


Avatar
Emmanuel Florac
Le Wed, 03 Jan 2007 08:25:23 -0800, pioche encore a écrit :

Y'a t'il une alternative aux pipes avec Perl sous Windows ?


peut-être utiliser un environnement Unix pour Windows, comme Microsoft
SFU , Cygwin ou MinGW? En plus ça te permettrait d'utiliser aussi les
outils Unix standards comme tr, cat, grep, uniq, sort etc.

--
A thing of beauty is a joy forever.
J. Keats.

Ah! Singe débotté, hisse un jouet fort et vert!
Marcel Bénabou.

Avatar
pioche encore


Y'a t'il une alternative aux pipes avec Perl sous Windows ?


peut-être utiliser un environnement Unix pour Windows, comme Microsoft
SFU , Cygwin ou MinGW? En plus ça te permettrait d'utiliser aussi les
outils Unix standards comme tr, cat, grep, uniq, sort etc.



Ouiménon.
J'aime bien l'environnement Cygwin c'est impressionant quand on voit
tout ce que cet émulateur peu faire. Mais je ne peux pas imposer ça
aux clients.
Finalement je crois que la solution qui a éte proposée plus haut de
gérer ça avec une véritable gestion de processus avec threads ipc ou
sockets asynchrone etc. C'est pas gagné mais bon il faut le faire.


Avatar
Emmanuel Florac
Le Thu, 04 Jan 2007 06:52:39 -0800, pioche encore a écrit :

J'aime bien l'environnement Cygwin c'est impressionant quand on voit
tout ce que cet émulateur peu faire. Mais je ne peux pas imposer ça
aux clients.


mingw ne fait qu'une poignée de Mo si tu ne veux pas installer Cygwin.

--
Le commissaire : Comment vous appelez-vous?
Garance : Moi je ne m'appelle jamais, je suis toujours là. J'ai pas
besoin de m'appeler. Mais les autres m'appellent Garance, si ça peut
vous intéresser.
Prévert,"les enfants du Paradis".