web-dev-qa-db-fra.com

Equivalent Windows à la commande "time" UNIX

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

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

66
efficiencyIsBliss

Utilisez Powershell

Measure-Command {start-process whateveryouwantexecute -Wait}

Edité selon vos besoins @efficiencylsBliss:

Measure-Command {start-process Java -argumentlist "whateverargumentisneeded" -wait}
56
mjsr

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

ptime 1.0 - Mesurez 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 plus. Il s'agit d'un minuteur automatique de processus ou d'un programme utilisé à des fins d'évaluation.

21
Murali Krishnan

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

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

Puis lancez votre programme comme argument de ce script ...

minuterie myprogram.exe

et pour les arguments ...

minuterie "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 exemple. C:\Windows\System32 et nommez-le timer.cmd. Bien sûr, il y a un petit problème de performance consistant à créer une deuxième instance cmd, bien que très minime.

16
John T

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

L’Université de Géorgie dispose d’une brève liste de commandes Windows pour les utilisateurs Unix .

Je trouve que les anciennes commandes Windows d'invite de commande et de script .bat sont plutôt limitées comparées aux shells Unix, mais il existe quelques possibilités de bouclage de fichiers, etc. CommandWindows.com propose quelques astuces .

Vous pouvez installer bash sous Windows (par exemple, en installant CygWin) ou apprendre Windows Powershell (ce qui, je suppose, est un moyen de faire quelque chose d’équivalent).

3
RedGrittyBrick

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 la redirection > mais PowerShell a ajouté un BOM au début du fichier et un saut de ligne CRLF après chaque écriture!

2
hippietrail

La sortie de votre code peut être transmise à un fichier: Java test <inputfile> | Out-File d:\a.txt

Pour mesurer combien de temps cela prend, vous devez l'encapsuler dans Measure-Commmand:

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

2
Abbas

Pour plus de facilité, voici le paquet Chocolatey: https://chocolatey.org/packages/ptimeC:/> choco install ptime

L’avantage si ptime est qu’elle agit comme la version unix et donne la sortie de la console, ce que Measure-Command { XXX } ne fait pas (ou du moins je ne sais pas comment faire cela).

1
Guy Langston

Il y a deux options différentes pour obtenir une commande 'time'. Ma préférence va tout simplement à l’installation de Cygwin (fourni avec une commande time de type UNIX).

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

Si vous avez Powershell disponible, essayez ce script (fonctionne lors de l'appel de 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 Batch , je suggérerais l’une des meilleures réponses de ici (sur Stackoverflow.com) . Les deux doivent simplement être copiés-collés. Notez que si vous utilisez la solution de paxdiablo , vous devez remplacer

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

avec

%*
0
David C

gnomon est une solution intéressante si vous n’avez pas seulement besoin du temps d’exécution total d’une commande, mais également d’une ligne pour les mesures de ligne:

Un utilitaire de ligne de commande pour ajouter des informations d'horodatage à la sortie standard d'une autre commande. Utile pour les processus de longue durée pour lesquels vous souhaitez un historique de ce qui prend si longtemps.

Installé en exécutant npm install -g gnomon, utilisez-le simplement via command | gnomon.

0
janpio

Un café m'a aidé à trouver ceci:

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

Et si vous ne voulez rien générer, 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
Andrei Ghimus