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 :

problème d'espace dans le nom d'un répertoire


Sujet :

Langage Perl

  1. #1
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut problème d'espace dans le nom d'un répertoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system('C:/Program Files/primer3/bin/primer3_core.exe < P:/Files/test.txt') and print $!;
    'C:/Program' n'est pas reconnu en tant que commande interne
    ou externe, un programme ex‚cutable ou un fichier de commandes.
    L'espace du nom du répertoire semble poser problème.
    Le $! est-il utile dans ce cas-ci?

    via une recherche sur le forum, je suis tombée sur un problème similaire résolu avec quotemeta http://www.developpez.net/forums/d21...-sous-windows/

    Mais dans mon cas, cela ne fonctionne pas car trop de backslashes sont rajoutés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $executable = quotemeta('C:/Program Files/primer3/bin/primer3_core.exe');
    system(" $executable < P:/Files/test.txt") and print $!;
    'C\:\' n'est pas reconnu en tant que commande interne
    ou externe, un programme ex‚cutable ou un fichier de commandes.

    et si je rajoute un seul backslash devant l'espace, cela ne fonctionne pas non plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system(" C:/Program\ Files/primer3/bin/primer3_core.exe < P:/Files/test.txt") and print $!;
    'C:/Program' n'est pas reconnu en tant que commande interne
    ou externe, un programme ex‚cutable ou un fichier de commandes.
    Avez-vous une autre idée?


    Merci,

  2. #2
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    Je ne connais rien à Windows mais que se passe-t-il si tu utilises des double-quote à l'intérieur de single-quote:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system('"C:/Program Files/primer3/bin/primer3_core.exe" < P:/Files/test.txt') and print $!;

  3. #3
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par iblis Voir le message
    Je ne connais rien à Windows mais que se passe-t-il si tu utilises des double-quote à l'intérieur de single-quote:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system('"C:/Program Files/primer3/bin/primer3_core.exe" < P:/Files/test.txt') and print $!;
    Oui, ça fonctionne Merci

    Pour le $! est-ce utile dans ce cas-ci?

    Le fichier d'entrée, ne contient qu'une seule ligne, sais-tu si il y a moyen de la passer directement et éviter ainsi de devoir 1) créer un fichier, 2) y copier mes données, 3) appelé l'exécutable sur ce fichier, 4) détruire ce fichier?

  4. #4
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    [QUOTE=Jasmine80;3952971]Pour le $! est-ce utile dans ce cas-ci?/QUOTE]

    Je pense que oui, pour savoir si l'appel s'est bien passé. J'utiliserai plutôt un warn (pour avoir l'erreur sur STDERR plutôt que STDOUT).

    Citation Envoyé par Jasmine80 Voir le message
    Le fichier d'entrée, ne contient qu'une seule ligne, sais-tu si il y a moyen de la passer directement et éviter ainsi de devoir 1) créer un fichier, 2) y copier mes données, 3) appelé l'exécutable sur ce fichier, 4) détruire ce fichier?
    Cela dépend de ton éxécutable. Lit-il l'entrée standard? Sous Unix tu pourrais faire:
    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "mydata" | mycommand

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    une autre façon d'utiliser system

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("Ma commande ") == 0 or die "system erreur $?"
    Sinon il y a aussi le module System2

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    et aussi Perl6::Builtins

  7. #7
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Oui, c'est vrai dans 'Perl Best Practice' ils conseillent également d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use Perl6::Builtins qw( system );
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    use POSIX qw ( WIFEXITED )
     
     
    WIFEXITED(system $cmd)
       or croak "Couldn't run : $cmd ('$OS_ERROR)";
    ... la raison est qu'utiliser un
    system ... and ... est contre-intuitif

    ... néanmoins, est-ce vraiment utilise de surcharger le code, d'appeler un module en plus pour si peu?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "mydata" | mycommand
    Je vais voir si l'équivalent existe en Windows


    Merci à vous deux pour vos réponses.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/01/2012, 15h43
  2. Problème d'espace dans nom de dossier.
    Par Snooky68 dans le forum Général Python
    Réponses: 11
    Dernier message: 29/08/2008, 14h55
  3. gérer un espace dans le nom d'un répertoire ?
    Par krislec dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 30/05/2008, 11h36
  4. Réponses: 2
    Dernier message: 27/07/2007, 19h22
  5. Réponses: 4
    Dernier message: 29/10/2005, 18h36

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