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

Lazarus Pascal Discussion :

[0.9.28.2] Linux TProcess espaces et | dans CommandLine [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Invité
    Invité(e)
    Par défaut [0.9.28.2] Linux TProcess espaces et | dans CommandLine
    Bonjour,

    Le code suivant fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
          aStringList := TStringList.Create;
          aProcess := TProcess.Create(nil);
          aProcess.CommandLine := 'ls' ;
          aProcess.Options := aProcess.Options + [poUsePipes] - [poWaitOnExit];
          aProcess.Execute;
          aStringList.LoadFromStream(aProcess.Output);
          aProcess.Free;
          aStringList.SaveToFile('output.txt');
          aStringList.Free;
    Mon fichier output.text contient alors 17 lignes.

    Si je remplace aProcess.CommandLine := 'ls' ; par aProcess.CommandLine := 'ls | head -5';, le fichier output.txt est vide or en console, la commande avec head -5 me retourne bien 5 lignes.

    Il s'agit très vraisemblablement d'un problème d'espaces et du | qui doivent être encadrés de simples ou doubles quotes à bon escient. Mais quelle est le bonne combinaison ?

    Merci. Cordialement. Gilles

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 506
    Points
    506
    Par défaut
    Je vais peut être dire une connerie... mais je me lance quand même.

    Je pense plutôt que ta commande 'ls | head' ne fonctionne pas car elle n'est pas exécutée pas un shell. Le '|' ne doit donc pas être interprété. Au lieu de ça la commande 'ls' doit recevoir '|' et 'head' en paramètre...

    Ça devrait mieux marcher avec un truc de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aProcess.CommandLine := 'sh -c ''ls | head -5'' ' ;

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci,

    L'explication est plausible, en effet. Je testerai le code demain (absent aujourd'hui).

    Cordialement.Gilles

  4. #4
    Invité
    Invité(e)
    Par défaut
    En effet,

    Cela fonctionne correctement. Merci beaucoup.
    Cordialement. Gilles

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

Discussions similaires

  1. Linux embarqué : espace mémoire + documentation
    Par dedibox26 dans le forum Linux
    Réponses: 4
    Dernier message: 16/01/2011, 23h16
  2. [VBA]effacer les espaces à ralonge dans des cellules
    Par repié dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/01/2006, 11h00
  3. Accéder à un espace Excel dans un formulaire Access
    Par Ronin-MK dans le forum Access
    Réponses: 6
    Dernier message: 14/11/2005, 21h05
  4. Linux: Inclure les lib dans l'executable
    Par baert dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 02/09/2005, 23h40
  5. [SYBASE]Libérer espace libre dans une base de données ?
    Par le_parrain dans le forum Sybase
    Réponses: 3
    Dernier message: 14/05/2004, 09h36

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