Question Windows équivalent à la commande UNIX "time"


Donc, Unix a un time commande qui permet aux utilisateurs de chronométrer leur code / autres choses. Je me demandais si la ligne de commande Windows avait quelque chose de similaire.

En outre, j'ai posé une question précédente concernant la ligne de commande Linux ici. Pouvons-nous faire la même chose pour Windows? Si c'est le cas, comment?


60
2018-01-01 22:47


origine


Windows a la norme cmd.exe mais si vous voulez quelque chose de plus proche de la version Linux, obtenez le PowerShell, c'est mieux. - Guillermo Siliceo Trueba
J'ai cherché "temps de commande pour windows" sur google sur le premier résultat donne: http://stackoverflow.com/questions/673523/how-to-measure-execution-time-of-command-in-windows-command-line - David Michel
Je suis sur Windows 7 et j'ai juste essayé la solution affichée ci-dessus. Je reçois l'erreur suivante: Unable to query system performance data (c0000004). Je l'ai googlé et quelqu'un d'autre avait exactement le même problème, mais le forum ne suggère aucune solution. Merci quand même pour la suggestion. Quelqu'un peut-il suggérer quelque chose pour l'autre partie? - efficiencyIsBliss
@eff, timeit.exe est pour le serveur 2003 et XP AFAIK, je ne pense pas que ce soit compatible avec 7. - John T


Réponses:


Utilisez Powershell

Measure-Command {start-process whateveryouwantexecute -Wait}

Édité à votre besoin @efficiencylsBliss:

Measure-Command {start-process java -argumentlist "whateverargumentisneeded" -wait}

53
2018-01-01 23:21



Voici ce que j'ai essayé: Measure-Command {java test <inputfile> -Wait}. J'ai une liste de statistiques relatives au temps, mais pas la sortie du code. Est-ce que je fais quelque chose de mal? - efficiencyIsBliss
@efficience: vous avez oublié le start-process commander. - Sasha Chedygov
Processus de démarrage: Un paramètre de position ne peut pas être trouvé et accepte l'argument ". \ 6-8.txt". À la ligne: 1 caractère: 31 + Measure-Command {start-process <<<< java. \ Dancebattle. \ 6-8.txt -wait} + CategoryInfo: InvalidArgument: (:) [Processus de démarrage], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound, Microsoft.PowerShell.Commands.StartProcessCommand` - efficiencyIsBliss
J'essaie de mesurer le temps qu'il faut pour exécuter un script Python en utilisant Measure-Command {start-process \Python27\python test.py -Wait}. Cela ouvre une nouvelle fenêtre cmd pour exécuter le processus, mais ferme ensuite la fenêtre quand elle est terminée. J'aimerais aussi voir la sortie du script, alors comment puis-je garder la fenêtre ouverte? - John Peter Thompson Garcés
@ JohnPeterThompsonGarcés utilise le paramètre -NoNewWindow de l'applet de commande start-process - mjsr


J'utilise Win XP, pour une raison quelconque, timeit.exe ne travaille pas pour moi J'ai trouvé une autre alternative: ptime:

ptime 1.0 - Mesure avec précision le temps d'exécution du programme

ptime exécutera toutes les commandes et paramètres spécifiés, et mesurera le temps d'exécution (temps d'exécution) en secondes, avec une précision de 5 millisecondes ou supérieure. Il s'agit d'un temporisateur de processus automatique ou d'un minuteur de programme utilisé à des fins d'évaluation.


17
2018-03-06 05:53



C'était indolore, merci. - dimo414
ptime a un petit bug. ptime renvoie toujours 0 comme niveau d'erreur, même si le programme "enfant" sort avec une erreur - Yura Shinkarev
Sortie super simple et précise. - janpio


Vous pouvez tricher un peu avec un script batch ...

@echo off
echo %time% < nul
cmd /c %1
echo %time% < nul

Ensuite, lancez votre programme comme argument pour ce script ...

minuterie myprogram.exe

et pour les arguments ...

timer "myprogram.exe -sw1 -sw2"

exemple de sortie:

17:59:20.02
some text
17:59:20.03

placez le script batch quelque part dans votre variable PATH, par ex. C:\Windows\System32 et nommez-le timer.cmd. Bien sûr, il y a un petit problème de performance lié à la création d'une seconde instance de cmd, bien que très minime.


15
2018-01-01 22:58



cette invite ne fonctionnerait pas, @echo off echo %time% < nul cmd /c %1 echo %time% < nul  vous avez omis le% de fermeture de la variable d'environnement (?)
Il n'y a pas de% de fermeture pour les paramètres de ligne de commande tels que% 1. Est-ce ce que tu voulais dire? - Andrew J. Brehm
Pourquoi voudriez-vous rediriger nul  dans  echo? echo ne lit jamais les entrées. - Joey
Vous pouvez changer cmd /c %1 à cmd /c %*, de sorte que vous pouvez enregistrer le guillemet pour les arguments de commande - stanleyxu2005


Il n'y a pas d'équivalent direct à Unix time sur Windows

L’Université de Géorgie a une brève liste de Commandes Windows pour les utilisateurs Unix

Je trouve que l'ancienne invite de commande Windows et le script .bat sont plutôt limités par rapport aux shells Unix, mais il existe certaines fonctionnalités pour la lecture en boucle de fichiers, etc. conseils

Vous pouvez soit installer bash sur Windows (par exemple en installant CygWin) ou apprenez Windows Powershell (que je suppose avoir un moyen de faire quelque chose d’équivalent).


3
2018-01-01 22:54





La sortie de votre code peut être acheminée vers un fichier: java test <inputfile> | Out-File d:\a.txt

Pour mesurer le temps nécessaire, vous devez l'encapsuler dans Measure-Commmand:

Measure-Commmand {java test <inputfile> | Out-File d:\a.txt}


2
2018-01-02 01:31





Si vous essayez d'utiliser PowerShell avec Measure-Command, sachez qu'il peut y avoir des pièges inattendus. Ma commande écrit des données binaires dans un fichier en utilisant > redirection mais PowerShell a ajouté un BOM au début du fichier et une ligne CRLF après chaque écriture!


2
2018-01-12 08:05





Il existe différentes options pour obtenir une commande "heure". Ma préférence est de simplement installer Cygwin (qui vient avec un UNIX-like time commander).

Vous pouvez également écrire un script et l'ajouter à votre chemin (pour pouvoir l'exécuter sans spécifier le chemin complet).

Si tu as Powershell disponible, essayez ce script (fonctionne lorsque vous appelez des fichiers - ".exe", etc.):

$start = get-date
if ($args.length -gt 1) {
start-process $args[0] $args[1..$args.length] -workingdirectory $pwd -nonewwindow -wait
} else {
start-process $args[0] -workingdirectory $pwd -nonewwindow -wait
}
$end = get-date
$elapsed = $end - $start
write-host $end-$start
# datetime format
write-host $elapsed
# easy-to-read format
echo $elapsed

Exécutez le code avec (par exemple):

time.ps1 python program.py

En utilisant Lot, Je suggère l'une des meilleures réponses de ici (sur Stackoverflow.com). Les deux doivent juste être copiés-collés. Notez que si vous utilisez la solution de paxdiablo, vous devriez remplacer

ping -n 11 127.0.0.1 >nul: 2>nul: 

avec

%*

0
2018-03-15 22:11





Certains cafés m'ont aidé à trouver ceci:

function time { $Command = "$args"; Measure-Command { Invoke-Expression $Command 2>&1 | out-default} }

Et si vous ne voulez rien sortir, remplacez simplement par out-null:

function timequiet { $Command = "$args"; Measure-Command { Invoke-Expression $Command 2>&1 | out-null} }

Vous l'utilisez comme ceci:

PS C:\> time sleep 5


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 4
Milliseconds      : 990
Ticks             : 49906722
TotalDays         : 5,77624097222222E-05
TotalHours        : 0,00138629783333333
TotalMinutes      : 0,08317787
TotalSeconds      : 4,9906722
TotalMilliseconds : 4990,6722



PS C:\>

0
2018-01-29 11:10