Juste une petite question sur le timing des programmes sous Linux: la commande time permet de mesurer le temps d'exécution d'un programme:
[ed@lbox200 ~]$ time sleep 1
real 0m1.004s
user 0m0.000s
sys 0m0.004s
Ce qui fonctionne bien. Mais si j'essaie de rediriger la sortie vers un fichier, il échoue.
[ed@lbox200 ~]$ time sleep 1 > time.txt
real 0m1.004s
user 0m0.001s
sys 0m0.004s
[ed@lbox200 ~]$ cat time.txt
[ed@lbox200 ~]$
Je sais qu'il existe d'autres implémentations de temps avec l'option -o pour écrire un fichier mais ma question concerne la commande sans ces options.
Aucune suggestion ?
Réponses:
Essayer
qui combine le STDERR de "time" et votre commande dans time.txt
Ou utiliser
qui place STDERR de "sleep" dans le fichier "sleep.stderr" et seul STDERR de "time" va dans "time.txt"
la source
time
évalue.{ time sleep 1; } 2>&1 | grep real
. Cela envoie stderr à stdout que grep peut ensuite lire.Wrap
time
et la commande que vous chronométrez dans un ensemble de crochets.Par exemple, les temps suivants
ls
et écrit le résultatls
et les résultats du chronométrage dansoutfile
:Ou, si vous souhaitez séparer la sortie de la commande de la sortie capturée de
time
:la source
Facile. L'
time
utilitaire GNU a une option pour cela.Mais vous devez vous assurer que vous n'utilisez pas la
time
commande intégrée de votre shell , au moins la commandebash
intégrée ne fournit pas cette option! C'est pourquoi vous devez donner le chemin complet de l'time
utilitaire:la source
Si vous vous souciez de la sortie d'erreur de la commande, vous pouvez les séparer comme ceci tout en utilisant la commande de temps intégrée.
ou
Comme vous voyez les erreurs de la commande, allez dans un fichier (puisque
stderr
est utilisé pourtime
).Malheureusement, vous ne pouvez pas l'envoyer à une autre poignée (comme
3>&2
) car cela n'existera plus en dehors du{...}
Cela dit, si vous pouvez utiliser le temps GNU, faites simplement ce que @Tim Ludwinski a dit.
la source
Étant donné que la sortie de la commande «time» est une sortie d'erreur, la rediriger en tant que sortie standard serait plus intuitive pour effectuer un traitement supplémentaire.
la source
Si vous utilisez l'heure GNU au lieu du bash intégré, essayez
(Remarque: les formats d'heure GNU sont un peu différents de ceux de bash intégré).
la source
\time -o outfile command
(avec ``) pour utiliser GNU au lieu de intégré.dans ton cas
puis
la source
time
binaire installé,out
contiendra quelque chose commebash: time: command not found
.J'ai fini par utiliser:
la source
Cela a l'avantage de ne pas engendrer de sous-coquilles, et le pipeline final a son stderr restauré au vrai stderr.
la source
Si vous ne voulez pas toucher les stdout et stderr du processus d'origine, vous pouvez rediriger stderr vers le descripteur de fichier 3 et inversement:
Vous pouvez l'utiliser pour un wrapper (par exemple pour les cronjobs) pour surveiller les temps d'exécution:
la source
Si vous utilisez,
csh
vous pouvez utiliser:Par exemple:
la source