IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Vérifier l'entrée standard


Sujet :

Langage Perl

  1. #1
    Membre du Club Avatar de d1g-2-d1g
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 127
    Points : 68
    Points
    68
    Par défaut Vérifier l'entrée standard
    Bonjour,

    j'ai un programme Perl qui et sensé ne rien faire si on lui donne rien sur l'entrée standard dès le début.

    Tout fonctionne bien lorsque je le fourni (par un cat par exemple) mais si je ne lui passe rien j'ai l'impression qu'il tourne en boucle attendant que je saisisse quelque chose au clavier...

    Ce que je voudrais c'est vérifier dès le début si quelque chose est sur l'entrée standard...

    Merci d'avance pour votre aide

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 573
    Points : 2 016
    Points
    2 016
    Par défaut
    Bonjour,

    peux-tu nous montrer les premières lignes de ton code stp ? En particulier, la ou les lignes qui traitent de l'entrée standard.

    Merci

  3. #3
    Membre du Club Avatar de d1g-2-d1g
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 127
    Points : 68
    Points
    68
    Par défaut
    Ca donne un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my @in = <STDIN>;
     
    foreach(@in)
    {
        #traitement...
    }

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Salut,
    Citation Envoyé par d1g-2-d1g
    Ca donne un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my @in = <STDIN>;
     
    foreach(@in)
    {
        #traitement...
    }
    Comme tu stockes les données depuis l'entrée standard dans un tableau tu n'as qu' faire un Ctrl-D pour arrêter la saisie et ensuite traiter les éléments de ton tableau.
    Ton tableau n'as pas une taille prédefini donc on attends toujours une saisie.
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    print "Entrez les éléments [ Ctrl-D ] pour quitter :\n";
     
    my @in = <STDIN>;
     
    foreach(@in)
    {
        #traitement...
    }
    Mais vaut peut être mieux de savoir ce que tu veux faire pour trouver une solution meilleure.

    lami20j
    --
    lami20j

  5. #5
    Membre du Club Avatar de d1g-2-d1g
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 127
    Points : 68
    Points
    68
    Par défaut
    Je ne veux rien faire si il n'y a rien dans l'entrée standard. Le seul moyen de passer quelque chose à mon programme est un "|" (ex : cat mon_fichier | monscript.pl ).

    C'est pour ca que je veux vérifier l'entrée standard dès le début mais pas proposer la saisie manuelle...

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Re,
    Citation Envoyé par d1g-2-d1g
    Je ne veux rien faire si il n'y a rien dans l'entrée standard. Le seul moyen de passer quelque chose à mon programme est un "|" (ex : cat mon_fichier | monscript.pl ).

    C'est pour ca que je veux vérifier l'entrée standard dès le début mais pas proposer la saisie manuelle...
    En ce cas essaie ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/perl
    use warnings;use strict;
     
    while (<>) {
    # traitement
    }
    Les données sont lues depuis | , il n'y a pas de l'entrée standard dans ton cas.

    lami20j
    --
    lami20j

  7. #7
    Membre du Club Avatar de d1g-2-d1g
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 127
    Points : 68
    Points
    68
    Par défaut
    Oui mais | renvoi sur l'entrée standard nan ?

    Je test ce soir et te tiens au courant...

    Merci

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Salut,
    Citation Envoyé par d1g-2-d1g
    Oui mais | renvoi sur l'entrée standard nan ?

    Je test ce soir et te tiens au courant...

    Merci
    Le | (pipe - à lire paip ) c'est comme un tube qui fait la liaison entre 2 extrémités.

    Veut que la sortie de 1er programme et l'entrée de 2ème.

    Quand tu fait cat fichier.txt le résultat est affiché sur la sortie standard STDOUT, mais comme tu préfères passer le résultat à ton script alors tu utilise |.

    Ce n'est pas une explication très académique mais je crois que c'est assez claire.

    lami20j

    P.S. cherche de la doc pour les redirections
    http://w3.uqo.ca/DOC/unx_pipes.html
    http://abs.traduc.org/abs-3.8-fr/ch16.html
    --
    lami20j

  9. #9
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    dsl, j'ai testé et le diamment ne marche pas (diamant cf. FAQ dvp :p), et je sais pas non plus comment faire ca...
    "vaste programme"

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    la question c'est de savoir si on est appelé avec un pipe ou de savoir si il y a quelque chose à lire sur ce pipe?

    si c'est la permiere alors il faut tester STDIN avec -t:

    (-t STDIN) retourne vrai si STDIN est interactif, et faux sinon (et donc c'est sans doute un pipe)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print( (-t STDIN) ? "Lancement interactif\n" : "Lancement pipe\n" );
    Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Salut,
    Citation Envoyé par BainE
    dsl, j'ai testé et le diamment ne marche pas (diamant cf. FAQ dvp :p), et je sais pas non plus comment faire ca...
    Ca depend de ton code. Affiche ton code pour voir.Si ça ne marchais pas je n'aurai rien dit.

    Il n'y a pas des doutes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat fichier | ./script.pl
    c'est un pipe (à moins que tu mets ça entre // et | devient une alternative)

    lami20j
    --
    lami20j

  12. #12
    Membre du Club Avatar de d1g-2-d1g
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 127
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par pospos
    la question c'est de savoir si on est appelé avec un pipe ou de savoir si il y a quelque chose à lire sur ce pipe?

    si c'est la permiere alors il faut tester STDIN avec -t:

    (-t STDIN) retourne vrai si STDIN est interactif, et faux sinon (et donc c'est sans doute un pipe)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print( (-t STDIN) ? "Lancement interactif\n" : "Lancement pipe\n" );

    Merci, c'est ca qu'il me fallait !


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 24/10/2006, 03h09
  2. Récupérer une adresse MAC sur l'entrée standard
    Par the_ionic dans le forum Réseau
    Réponses: 14
    Dernier message: 20/07/2006, 09h56
  3. Entrée standard
    Par VinnieMc dans le forum Langage
    Réponses: 7
    Dernier message: 17/03/2006, 11h48
  4. [Entrée standard] Prendre les entrées clavier.
    Par Katyucha dans le forum Langage
    Réponses: 4
    Dernier message: 19/09/2005, 12h22
  5. Réponses: 2
    Dernier message: 21/12/2004, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo