perlwin32faq4 - Windows NT/2000 et Windows 9x |
perlwin32faq4 - Windows NT/2000 et Windows 9x
Informations utiles à propos de Windows NT et Windows 9x pour les développeurs Perl
Les fichiers d'aide joints à Windows 2000 sont une excellente source d'informations et peuvent répondre à la plupart de vos questions sur Windows 2000.
Le support du World Wide Web pour Windows 2000 peut être trouvé à:
http://support.microsoft.com/
Un bon endroit pour démarrer est la documentation papier accompagnant Windows NT et sur le CD de Windows NT dans le répertoire support\books. Les fichiers d'aide de Windows sont également disponibles.
Des informations plus détaillées sur Windows NT sont disponibles avec le Kit de Ressources Windows NT , disponible dans les librairies et chez Microsoft. Microsoft TechNet est également une ressource utile.
Un support web pour Windows NT Server est disponibles à :
http://www.microsoft.com/ntserver/
Le support Windows NT Workstation est sur :
http://www.microsoft.com/ntworkstation/
Une documentation papier est livrée avec Windows 9x, ainsi que quelques documentations sur le CD-ROM. Les fichiers d'aide sont disponibles depuis le menu démarrer.
Le support web pour Windows 95/98 est sur:
http://www.microsoft.com/windows95/
http://www.microsoft.com/windows98/
Malheureusement, les plates-formes Win32 ne fournissent pas la syntaxe
shebang, ou un équivalent. Vous pouvez essayer une des deux
méthodes suivantes pour exécuter un script depuis la
ligne de commande. Si tout échoue, vous pouvez toujours
invoquer l'interpréteur perl directement, comme dans perl
myscript.pl
.
Bien que les systèmes Win32 eux-mêmes n'utilisent pas le shebang, le serveur web Apache lui si. Si vous utilisez le serveur web Apache sur votre système Win32 vous devriez mettre le shebang en tête de vos scripts CGI.
Votre ligne shebang devrait ressembler à :
#!perl
Pour Windows NT 4.0/2000, la méthode la plus simple est d'utiliser
les associations de fichiers
(voir Comment associer les scripts Perl à perl ?).
Si vous avez associé les scripts Perl avec l'extension .pl, vous pouvez
taper le nom du script sur la ligne de commande et Windows NT/2000 lancera
perl.exe pour vous. Si vous changer la variable d'environnement
PATHEXT
pour inclure les fichiers .pl, comme ceci :
SET PATHEXT=.pl;%PATHEXT%
Vous pouvez taper le nom du fichier sans extension, et Windows NT/2000
trouvera le premier .pl dans votre PATH avec ce nom. Vous pouvez
préférer initialiser PATHEXT
dans le panneau de contrôle système plutôt
que sur la ligne de commande. Sinon, vous aurez à le ressaisir à chaque fermeture
de la fenêtre de commandes.
Une fois ceci fait, vous pouvez avoir un script Perl nommé cat.pl ressemblant à :
while ( <> ) { print; }
et vous pouvez l'invoquer sur la ligne de commande comme :
cat myfile.txt
Cependant, vous ne pouvez pas l'invoquer avec des redirections I/O comme :
cat < myfile.txt cat myfile.txt | more
même si vous avez l'impression de pouvoir (c'est une limitation de Windows NT/2000). Vous pouvez soit avoir le fichier dans votre chemin, soit spécifier le chemin en appelant le fichier.
Notez que la méthode d'association de fichiers ne fonctionne pas sous Windows 9x, ni sous Windows NT/2000 si vous avez désactivé les extensions de commandes. Vous pouvez, cependant, démarrer le script depuis l'explorateur de Windows si l'extension est associée à perl.
Une autre option est d'utiliser l'utilitaire pl2bat distribué avec ActivePerl pour convertir votre script Perl en fichier batch. Ce qu'il fait est d'ajouter des instructions batch Win32 en tête du script pour que le système invoque l'interpréteur perl. En fait, c'est une programme batch plutôt malin.
Si vous invoquez l'utilitaire pl2bat sur votre script Perl helloworld.pl, comme ceci :
C:\> pl2bat helloworld.pl
Il produira un fichier batch, helloworld.bat. Vous pouvez alors appeler le script comme ceci :
C:\> helloworld Hello, World!
Vous pouvez passer des paramètres également. Votre script peut être dans
votre PATH
, ou un autre répertoire, et le code pl2bat le trouvera et
l'exécutera correctement. Le grand avantage de ceci sur les associations
de fichiers est que la redirection des Entrées/Sorties fonctionnera
correctement.
pl2bat fournit nombre d'options pour contrôler la manière dont la conversion est faite, quelles options passer au Perl, etc.
Pour les détails voir la page de manuel pl2bat et aussi la page de manuel runperl.
PerlApp, disponible dans le Perl Dev Kit ( http://www.activestate.com/Products/Perl_Dev_Kit/ ), crée des fichiers .exe autonome à partir de scripts Perl. La redirection fonctionne correctement avec les fichiers .exe engendrés par PerlApp.
Il n'y a pas d'équivalence directe à chmod sur les systèmes Win32.
Pour les attributs de fichiers, vous pouvez utiliser la commande en ligne ATTRIB
(tapez HELP ATTRIB
sur la ligne de commande pour les détails).
Pour des permissions plus complexes, voir Comment assigner des droits à un ficher ?
Pour des informations sur la fonction chmod()
, voir
Comment fonctionne la fonction chmod() sur les plates-formes Win32 ?.
Vous pouvez tomber sur des scripts qui envoient des messages avec un programme externe, comme dans :
#!/usr/bin/perl
open(MAIL, '| /usr/lib/sendmail user@there.com') or die "$!"; print MAIL <<EOF; To: user@there.com From: user@here.com
Hello, World!
EOF
Ce type de script amène généralement les gens à demander, «existe-t-il
un équivalent à sendmail sur Windows?» Si vous avez besoin d'envoyer
un email depuis un script Perl, il n'est pas nécessaire d'utiliser un
programme externe comme sendmail. Le package libnet
inclut Net::SMTP
, un module qui peut être utilisé pour envoyer des emails.
Voici un exemple :
use Net::SMTP;
$smtp = Net::SMTP->new('here.com'); # Connexion à un serveur SMTP
$smtp->mail( 'user@here.com' ); # expéditeur
$smtp->to('user@there.com'); # destinataire
$smtp->data(); # Début du mail
# Envoi de l'entête. # $smtp->datasend("To: user@there.com\n"); $smtp->datasend("From: user@here.com\n"); $smtp->datasend("\n");
# Envoi du corps du message. # $smtp->datasend("Hello, World!\n");
$smtp->dataend(); # Fin d'envoi $smtp->quit; # Fermer la connexion SMTP
Une autre alternative est Mail::Sender
, qui peut être utilisé comme ceci :
use Mail::Sender;
$sender = new Mail::Sender {smtp => 'mail.yourdomain.com', from => 'your@address.com'}; $sender->MailFile({to => 'some@address.com', subject => 'Here is the file', msg => "Voici le fichier requis.", file => 'fichier.txt'});
Ou Mail::Sendmail
, qui peut-être utilisé comme :
use Mail::Sendmail;
%mail = ( To => 'you@there.com', From => 'me@here.com', Message => "Petit message" );
if (sendmail %mail) { print "Mail sent OK.\n" } else { print "Error sending mail: $Mail::Sendmail::error \n" }
Un script Perl pour poster des messages sans utiliser un programme externe est aussi disponible sur la page Perl pour Win32 de Robin Chatterjee (voir Existe-t-il des sources d'information disponibles sur ActivePerl sur le World Wide Web ?).
Si vous avez réellement besoin d'un équivalent à sendmail pour Windows, plusieurs existent :
Un produit sendmail commercial est disponible chez MetaInfo, Inc. Une version d'évaluation est disponible sur http://www.metainfo.com/
L'utilitaire UNIX cron n'existe pas sur les plates-formes Win32.
Pour Windows 2000, il y a un planificateur disponible. On peut y accéder par
le menu Démarrer : Démarrer | Paramètres | Panneau de configuration | Tâches Planifiées
.
En cliquant «Création d'une tâche planifiée», vous lancez l'assistant des Tâches planifiées
qui vous guide durant tout le processus.
Pour Windows NT, un outil de planification appelé AT
est
disponible. Contrairement à l'outil UNIX cron, AT
ne stocke
pas ses tâches dans un fichier texte, mais se configure en ligne
de commande. Notez que les commandes AT semblent très
pointilleuses avec la syntaxe. Voici un exemple :
at 23:37 /interactive /every:M,T,W,Th,F,S,Su cmd /c "c:\perl\bin\perl.exe c:\test.pl"
Si vous n'aimez pas la version ligne de commande de AT
, il existe
une version GUI, WinAT, disponible avec le Kit de ressources Windows NT.
Le service «Schedule» doit tourner quand votre tâche est supposée s'exécuter.
Vous pouvez rencontrer des problèmes avec AT ou WinAT si le script ou le programme planifié requièrent des droits spéciaux autres que ceux possédés par «System» (c'est-à-dire, si cela utilise le domaine NT). C'est parce que NT ne vous autorise pas correctement à utiliser des services NT préinstallés, comme le «Schedule» comme étant un utilisateur avec des privilèges réseau. Il peut sembler que vous pouvez configurer le planificateur pour se connecter comme un utilisateur avec des privilèges réseau, mais le service ne reconnaît pas les droits de cet utilisateur et l'utilisateur système a seulement des droits locaux.
Une solution cron tout-en-Perl qui utilise un fichier crontab à la Unix existe à http://www.megadodo.demon.co.uk/perl/ . Ce script peut être lancé comme un service NT (voir Comment exécuter un script Perl comme un service Windows NT ?). Quand vous créez votre propre service NT, NT vous laisse fixer le couple utilisateur/mot de passe, et ces services reconnaissent les droits correspondants. Donc le script ou programme planifié aura les droits nécessaires.
[voir aussi cron pour Windows : http://www.kalab.com/freeware/cron/cron.htm -NdT]
Il existe quelques planificateurs commerciaux. NTcrond, disponible chez ifdef software: http://www.ifdef.com/ et AutoTask2000 chez http://www.cypressnet.com/ . Ces programmes devraient reconnaître les droits de l'utilisateur sous le nom duquel il tourne pour permettre au script ou programme planifié de fonctionner correctement.
Pour Windows 9x, il y a un agent système disponible avec le pack Microsoft Plus!. De plus, plusieurs sharewares (NdT : Partagiciels pour les puristes) de planification, notamment LaunchPad et Metz Scheduler sont disponibles. On peut les trouver avec un bon moteur de recherche de shareware, par exemple http://www.shareware.com/ . Il existe également un composant optionnel «Planificateur de Tâches» avec IE4.01 et Windows 98.
Parce que le planificateur sous NT tourne comme un service (voir Qu'est-ce qu'un service Windows NT ? , vous devez prendre des précautions pour être sûr que les fichiers et variables d'environnement soient accessibles au script.
Dans certains cas, la fonction interne Perl sleep
peut être
un moyen approprié de planifier. Par exemple:
$seconds = 180; sub action; while(1) { &action; sleep($seconds); }
Vous devriez jeter un oeil au fichier d'aide de Windows NT et Windows 9x pour voir s'il y a un équivalent approximatif distribué avec votre plate-forme Win32. Sinon, essayez une de ces URLs :
Il existe également plusieurs outils type-UNIX sur le Kit de Ressource de Windows NT.
Finalement, il existe plusieurs packages commerciaux UNIX-à-Win32, y compris le MKS de Mortice Kerns Systems, Inc.: http://www.mks.com/ .[Voir aussi U/WIN - Unix for Windows : http://www.research.att.com/sw/tools/uwin/ - NdT]
Vous pouvez aussi consulter le Perl Power Tools, en développement sous le projet UNIX Reconstruction. Là, vous pouvez trouver des outils UNIX réimplémentés en tout-Perl. La dernière version est sur http://www.perl.com/language/ppt/
Sur Windows un service est un programme spécial qui s'exécute en tâche de fond [un daemon, dans le langage Unix]. Les services sont utilisés pour les programmes qui tournent en permanence, comme les protocoles réseau ou les serveurs de bases de données. La plupart des serveurs WWW sur Windows NT/2000 sont implémentés en service.
Un service diffère d'un programme classique par plusieurs points :
NET START
et NET STOP
puissent être utilisées pour arrêter et
démarrer un serveur. Le panneau de contrôle Services est utilisé pour
démarrer, arrêter ou pauser un service.
Les services n'agissent pas avec l'autorité d'un utilisateur loggé. Cela
signifie que le service ne peut pas voir les variables d'environnement ou
lire des fichiers réservés à un utilisateur loggé. Vous pouvez spécifier
le compte utilisateur utilisé par un service dans le panneau de contrôle
Services.
Les services tournent même quand personne n'est loggé sur la machine.
Le plus important est de penser à prendre les précautions pour rendre
les ressources disponibles aux services. En général, vous avez besoin
de rendre les fichiers disponibles pour le groupe Tout le monde, et
d'avoir les variables d'environnement (comme PATH
) dans l'environnement
système.
Vous pouvez exécuter vos scripts Perl comme des services Windows NT avec
un programme appelé srvany.exe
, livré avec le kit de ressources Windows NT.
Une fois installé srvany.exe
, lisez le fichier srvany.wri qui devrait
l'accompagner. Ce document expliquera comment modifier la base de registres
pour votre nouveau service.
Après l'installation pour lancer votre script comme un service faite :
x:>srvany perl script.pl
[ Le module Win32::Daemon permet d'écrire directement un script comme un service :
http://www.roth.net/perl/Daemon/
-NdT]
Vous pouvez lancer vos scripts Perl comme des services Windows 2000 en accédant
à MMC (Microsoft Management Console). Les fichiers d'aide de Windows 2000
contiennent beaucoup d'informations sur la manière de lancer MMC et comment
vous pouvez l'utiliser pour les scripts Perl. [Dans une console DOS, lancez
MMC avec la commande mmc
; lire ensuite le fichier d'aide : (?) - NdT]
Les plates-formes Win32 n'ont pas les mêmes mécanismes pour fixer les permissions de fichiers qu'UNIX. Pour les fichiers sur partition FAT (c'est-à-dire tous les fichiers sous Windows 9x), vous n'avez pas à fixer les droits explicitement. Tous les fichiers sont disponibles pour tous les utilisateurs.
Pour les fichiers sur une partition NTFS sur Windows NT/2000, vous pouvez définir les droits des fichiers avec l'explorateur Windows et les propriétés du fichier. Cliquez-droit sur le fichier dans l'explorateur, et choisissez Propriétés dans le menu déroulant. Choisissez l'onglet Sécurité, et cliquez Permissions pour choisir les droits du fichier. Cliquez Aide pour plus d'information.
Un programme en ligne de commande, CACLS
, permet également de changer les
permissions sur un fichier. Pour plus de détails, tapez HELP CACLS
sur la
ligne de commande.
Les machines Windows 9x administrées par Novell peuvent avoir des comptes et droits similaires à NT. Cependant, ces permissions doivent être configurées par l'administrateur Novell.
Sur les systèmes Windows, l'association est le processus qui spécifie quel type de programme utiliser pour quel type de fichier. Les fichiers sont regroupés par type de fichiers, comme les fichiers JPEG ou les scripts Perl. Le type d'un fichier est identifié par son extension (toutes les lettres après le dernier «.» dans le nom du fichier).
Par exemple, disons que nous avons un type appelé fichier texte, avec l'extension .txt, et qui est géré par le Notepad.
Habituellement, les programmeurs Perl pour Win32 créent un type de fichier comme Script Perl et lui associent l'extension .pl. Nous spécifions que l'interpréteur perl binaire, perl.exe, est responsable de ce type de fichier. Plusieurs serveurs Web exigent que vous associiez vos scripts à perl.exe avant de pouvoir les utiliser.
Sur Windows 2000, vous pouvez créer un nouveau type et lui associer l'interpréteur perl comme suit :
Poste de travail
.
Dans le menu Outils
, choisissez Options des dossiers...
Ce qui ouvre la boîte de dialogue options.
Choisissez l'onglet Types de fichiers
. Ce qui vous donne la liste des
types de fichier couramment enregistrés (ou déjà associés dans Windows 2000)
Cliquez le bouton Nouveau
.
Dans la boîte Extension de fichier
, tapez «.pl» et cliquez OK.
Cliquez sur le bouton Avancée
. Ce qui ouvre la fenêtre
Modification du type de fichier
.
Cliquez sur le bouton Nouveau
. Ce qui ouvre la boîte de dialogue
Nouvelle action
. Tapez «Ouvrir» dans la rubrique Action
(puisque vous
voulez que les fichiers Perl soient «ouverts» par l'interpréteur Perl).
Alors, soit vous tapez le chemin complet vers l'interpréteur Perl dans la rubrique
Application utilisée pour exécuter cette action
, soit vous cliquez sur le bouton
Parcourir...
pour sélectionner le fichier exécutable de l'interpréteur Perl.
Cliquez OK pour fermer la fenêtre Nouvelle action
. Vous pouvez cliquer
sur le bouton Changer d'icône
si vous voulez trouver une icône qui correspond
au type de fichier. Quand vous cliquez sur le bouton Changer d'icône
, vous pouvez
faire votre choix dans une sélection d'icônes ou vous pouvez regarder à un emplacement
différent. Si vous voulez utiliser une icône Perl pour les fichiers «.pl», regardez
dans le répertoire où se trouve l'interpréteur Perl, choisissez l'interpréteur Perl
et cliquez sur le bouton Ouvrir
. Alors cliquez sur OK pour fermer la fenêtre
Changer d'icône
.
Cliquez sur OK pour fermer la fenêtre Modification du type de fichier
.
Cliquez sur Appliquer
pour fermer la fenêtre Options des dossiers
.
Sur Windows 9x et Windows NT 4.0, vous pouvez créer un nouveau type et lui associer l'interpréteur perl comme suit :
Poste de Travail
sur le bureau. La fenêtre Poste
de Travail
devrait apparaître.
Dans le menu Affichage
de la fenêtre Poste de Travail
,
choisissez Options
. La boîte de dialogue Option
apparaît.
Dans la boîte de dialogue Options
, sélectionnez l'onglet Types de Fichiers
.
Cliquez le bouton Nouveau
. La boîte de dialogue Ajouter Nouveau
Type de Fichier
apparaît.
Dans la case Description du type
, tapez «Perl Script».
Dans la case Extension Associée
, tapez «.pl».
Laissez la case Type de Contenu (MIME)
vide.
Cliquez le bouton Nouveau
sous la liste Action
. La boîte de
dialogue Nouvelle Action
apparaît.
Dans la case Action
, taper «Ouvrir» (C'est important d'utiliser ce nom
pour l'action!).
Dans la case Application utilisée pour exécuter cette
action
, tapez [chemin complet de perl]\perl.exe %1 %*
, où
[chemin complet de perl] est le chemin complet de perl.exe sur votre
machine. Si perl est dans votre chemin, vous pouvez mettre juste
perl.exe, mais pour des raisons ésotériques il est
mieux de mettre le chemin complet. De même, si le chemin
jusqu'à l'interpréteur comprend des espaces (comme
C:\Program Files\perl5) mettez-le chemin DOS à la place
(C:\progra~1\perl5).
Cliquer OK pour fermer la boîte de dialogue Nouvelle Action
.
Cliquer OK pour fermer la boîte de dialogue Ajouter Nouveau Type
de Fichier
.
Cliquer OK pour fermer la boîte de dialogue Options
.
Vous pouvez tester votre association en double cliquant sur un script perl dans l'explorateur Windows. Si perl.exe démarre et exécute le script, les choses sont OK.
Dans Windows NT 4.0, vous pouvez éviter tout le sac de noeuds ci-dessus en tapant ce qui suit sur la ligne de commande :
ASSOC .pl=PerlScript FTYPE PerlScript=[full path to perl]\perl.exe %1 %*
Pour plus d'information sur ces commandes, tapez HELP FTYPE
au
prompt.
Notez que, pour que cela fonctionne, vous devez avoir les extensions de commandes activées. (Elles le sont par défaut ; vous saurez si vous les avez désactivées.)
Il fonctionne - C'est juste que certains interpréteurs de commandes (par exemple COMMAND.COM, CMD.EXE et 4DOS) n'acceptent pas les simples quotes autour des commandes.
Le moyen le plus sûr pour faire du perl monoligne est d'entourer
les paramètres entre " "
(double-quotes) et d'utiliser q()
et qq()
à l'intérieur des paramètres. q()
et qq()
avec
ce qui est à l'intérieur entre simple-quotes ou
double-quotes, respectivement.
Par exemple:
perl -e "use LWP::Simple; while(@c = head <>) { $c = join qq(\n\t), @c; print qq(Header info:\n\t$c\n); }"
(C'est une seule ligne)
Lancez-le depuis la ligne de commande et tapez l'URL de votre site favori, comme http://www.perl.com/ ...
Windows est livré avec deux éditeurs qui sont parfaits pour le Perl, NotePad et WordPad. Mais, si vous avez besoin de plus de fonctionnalités pour simplifier la saisie, voici une liste d'éditeurs gratuits et commerciaux :
Cette FAQ a été à l'origine assemblée et maintenue par Evangelo Prodromou. Elle a été révisée et mise à jour par Brian Jepson de O'Reilly and Associates, et David Grove et David Dmytryshyn d'ActiveState.
Cette FAQ est dans le domaine public. Si vous l'utilisez, cependant, vérifiez, s'il vous plaît, que vous donniez le crédit aux auteurs originaux.
Cette traduction française correspond à la version anglaise distribuée avec perl 5.8.0. Pour en savoir plus concernant ces traductions, consultez http://www.enstimac.fr/Perl/ .
Fabien Martinet <ho.fmartinet@cma-cgm.com>
Jean-Louis Morel <jl_morel@bribes.org> (mise à jour perl 5.8.0)
perlwin32faq4 - Windows NT/2000 et Windows 9x |