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 :

[Linux] '\n' pour afficher un print sous certains users ?


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 36
    Points : 16
    Points
    16
    Par défaut [Linux] '\n' pour afficher un print sous certains users ?
    Salut !

    J'ai un chtit problème avec Perl sous Linux. Avec certains utilisateurs je peux faire un print "xxx", ça s'affiche sans problème, et sous certains autres utilisateurs je dois mettre un '\n' pour que ça s'affiche...

    Bizarre non ?

    Une idée de la source du problème ?

    Merci.

  2. #2
    Membre actif Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Points : 207
    Points
    207
    Par défaut
    C'est normal, et je ne pense pas que ce soit lié à un utilisateur en particulier.

    C'est un problème de flux, sur un terminal le flux de sortie standard (STDIN) est vidé ligne à ligne.
    Donc quand tu écris "print 'xxx'; ", tu n'as aucune garantie que ce sera imprimé dès réception dans le tampon. Cette garantie n'existe que si une ligne complète est reçue (donc terminée par '\n').

    Pour contourner le problème, tu peux positionner la variable "output autoflush" à 1, comme ceci :

    "I hate quotations. Tell me what you know." (Ralph Waldo Emerson)

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 36
    Points : 16
    Points
    16
    Par défaut
    J'ai essayé de faire ça, ça ne fonctionne toujours pas.
    En fait comme tu le dis, je viens de m'apercevoir que le problème ne vient pas de l'utilisateur mais du shell utilisé (différent donc selon les utilisateur... ) ! Sous bash, ça s'affiche, sous ksh, ça ne s'affiche pas, même en positionnant output autoflush à 1...

    Maintenant, si c'est normal, je vais faire avec !

    Merci de ton aide.

  4. #4
    Membre actif Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par Grubshka
    J'ai essayé de faire ça, ça ne fonctionne toujours pas.
    En fait comme tu le dis, je viens de m'apercevoir que le problème ne vient pas de l'utilisateur mais du shell utilisé (différent donc selon les utilisateur... ) ! Sous bash, ça s'affiche, sous ksh, ça ne s'affiche pas, même en positionnant output autoflush à 1...

    Maintenant, si c'est normal, je vais faire avec !

    Merci de ton aide.
    Ce n'est pas normal avec $| = 1.
    "I hate quotations. Tell me what you know." (Ralph Waldo Emerson)

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 36
    Points : 16
    Points
    16
    Par défaut
    Et pourtant... c'est le cas !

    En csh et bash, ça fonctionne (c'est même comme ça par défaut).
    En ksh et zsh, ça ne fonctionne pas.

  6. #6
    Membre actif Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Points : 207
    Points
    207
    Par défaut
    Ceci n'affiche rien du tout pendant 3s, puis affiche "machin" et sort :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/usr/bin/perl
     
    use strict;
     
    printf("machin");
     
    sleep(3);

    Ceci affiche "machin", attend 3s, et sort :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/usr/bin/perl
     
    use strict;
     
    $| = 1;
     
    printf("machin");
     
    sleep(3);

    Fonctionne sous csh, ksh, zsh. J'ai pas testé d'autres shells, mais ce sera pareil.

    Soit tu as un problème ailleurs dans le script, soit le problème se situe ailleurs en dehors du script, soit il y a autre chose.

    Au fait, juste pour être sûr, tu as bien écrit $| comme 'dollar' + alt-gr+6 ?
    (désolé si c'est déjà le cas, mais comme ça fonctionne bien chez moi, je cherche une explication)
    "I hate quotations. Tell me what you know." (Ralph Waldo Emerson)

  7. #7
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    La chaine s'affiche dans tous les cas, mais le prompt de ksh vient l'écraser aussitot après. Le prompt de bash n'a pas ce comportement.

  8. #8
    Membre actif Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par vic
    La chaine s'affiche dans tous les cas, mais le prompt de ksh vient l'écraser aussitot après.


    Je demande un screenshot pour voir à quoi ça ressemble, car là je ne comprends pas ce que tu veux dire.

    Chez moi, sous ksh, ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ perl test.pl
    machin$
    (le dollar après "machin", c'est le prompt)
    "I hate quotations. Tell me what you know." (Ralph Waldo Emerson)

  9. #9
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    Ben quand la dernière ligne n'a pas de retour chariot le prompt vient l'écraser. Si le programme n'affiche qu'une ligne on peut croire qu'il ne s'est rien passé.

    Je sais qu'on peut configurer ce comportement mais j'utilise bash donc je ne sais pas comment

  10. #10
    Membre actif Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par vic
    Ben quand la dernière ligne n'a pas de retour chariot le prompt vient l'écraser. Si le programme n'affiche qu'une ligne on peut croire qu'il ne s'est rien passé.

    Je n'ai jamais vu ça. En plus c'est complètement contraire à la philosophie du terminal, qui veut qu'on n'efface rien de ce qui a été précédemment écrit. Quel que soit le shell.

    Ou alors c'est une configuration du terminal avec stty ? Hmm, je ne sais pas si c'est possible d'effacer ce qui a été écrit, ni même de pouvoir vider le tampon de sortie standard sans rien écrire (enfin si, en forçant explicitement ECHOE à 0, mais c'est une autre histoire).

    Bon, bref. Je vais me renseigner sur ça, je n'ai pas la science infuse et je peux me tromper. Mais je suis quand même très dubitatif.
    "I hate quotations. Tell me what you know." (Ralph Waldo Emerson)

  11. #11
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    Citation Envoyé par Gamdwin
    En plus c'est complètement contraire à la philosophie du terminal, qui veut qu'on n'efface rien de ce qui a été précédemment écrit. Quel que soit le shell.
    Je suis d'accord que ça devrait être le cas, mais certains terminaux préfère fonctionner autrement.

    Citation Envoyé par Gamdwin
    Hmm, je ne sais pas si c'est possible d'effacer ce qui a été écrit
    Déjà entendu parler de \r ?

    Citation Envoyé par Gamdwin
    Bon, bref. Je vais me renseigner sur ça, je n'ai pas la science infuse et je peux me tromper. Mais je suis quand même très dubitatif.
    En effet la sagesse suggère de se renseigner avant d'être affirmatif.

  12. #12
    Membre actif Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par vic
    Je suis d'accord que ça devrait être le cas, mais certains terminaux préfère fonctionner autrement.
    Terminaux, ou shells ?
    Quoi qu'il en soit, je ne vois pas exactement ce que tu veux dire, as-tu des exemples ?

    Citation Envoyé par vic
    Déjà entendu parler de \r ?
    Bien entendu, mais l'utilisation en est normalement restreinte.
    On ne devrait (conditionnel) utiliser ce caractère que dans certaines circonstances, comme faire avancer un pourcentage d'exécution par exemple (l'effacement ne concerne pas une information, il la fait évoluer).


    Citation Envoyé par vic
    En effet la sagesse suggère de se renseigner avant d'être affirmatif.
    Le premier paragraphe contient deux constations. Le second est une interrogation, et le troisième, la conclusion.
    Pas d'affirmation dans mon message.
    "I hate quotations. Tell me what you know." (Ralph Waldo Emerson)

  13. #13
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 36
    Points : 16
    Points
    16
    Par défaut
    C'est bien ce que dit vic, sous ksh ou zsh, ton second script affiche "machin", attend 3 secondes, mais au bout des 3 secondes le prompt vient écraser la chaîne. Sous bash et csh le comportement est "normal", le prompt s'affiche à la suite de la chaîne "machin".

    Merci.

  14. #14
    Membre actif Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par Grubshka
    C'est bien ce que dit vic, sous ksh ou zsh, ton second script affiche "machin", attend 3 secondes, mais au bout des 3 secondes le prompt vient écraser la chaîne. Sous bash et csh le comportement est "normal", le prompt s'affiche à la suite de la chaîne "machin".

    Merci.
    Je ne parviens pas à reproduire ce comportement chez moi.
    Comment faire ?
    "I hate quotations. Tell me what you know." (Ralph Waldo Emerson)

  15. #15
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 36
    Points : 16
    Points
    16
    Par défaut
    Si je le savais, je ferais en sorte que ça ne se produise pas chez moi

    Merci encore de votre aide !

Discussions similaires

  1. Afficher le print dialog natif sous linux
    Par _skip dans le forum Documents
    Réponses: 0
    Dernier message: 25/02/2011, 12h12
  2. Quel webpart pour afficher uniquement les sous-sites d'un site?
    Par gracouille dans le forum SharePoint
    Réponses: 0
    Dernier message: 02/06/2008, 19h37
  3. Réponses: 3
    Dernier message: 29/09/2006, 09h48
  4. comment afficher cursor: hand sous FF pour une image?
    Par Death83 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/09/2005, 08h48

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