Équivalent Windows de la commande «time» UNIX


70

Donc, Unix a une timecommande 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?


2
Windows a le cmd.exe standard, mais si vous voulez quelque chose de plus proche de la version linux, procurez-vous le powershell, c'est encore 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 sous Windows 7 et je viens d’essayer la solution ci-dessus. Je reçois l'erreur suivante: Unable to query system performance data (c0000004). Je l'ai googlé et quelqu'un d'autre a eu 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:


57

Utilisez Powershell

Measure-Command {start-process whateveryouwantexecute -Wait}

Edité selon vos besoins @efficiencylsBliss:

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

Voici ce que j'ai essayé: Measure-Command {java test <inputfile> -Wait}. J'ai eu une liste de statistiques liées au temps, mais pas la sortie du code. Est-ce que je fais quelque chose de mal?
efficienceIsBliss

@efficiency: Vous avez oublié la start-processcommande.
Sasha Chedygov

Processus de démarrage: Impossible de trouver un paramètre de position acceptant l'argument '. \ 6-8.txt'. A la ligne: 1 caractère: 31 + mesure_commande {start-process <<<< java. \ Dancebattle. \ 6-8.txt -wait} + CategoryInfo: InvalidArgument: (:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId PositionalParameterNotFound, Microsoft.PowerShell.Commands.StartProcessCommand`
efficiencyIsBliss, le

1
J'essaie de mesurer le temps qu'il faut pour exécuter un script Python avec Measure-Command {start-process \Python27\python test.py -Wait}. Cela ouvre une nouvelle fenêtre cmd pour exécuter le processus, mais ferme la fenêtre une fois l'exécution terminée. J'aimerais aussi voir la sortie du script. Comment puis-je garder la fenêtre ouverte?
John Peter Thompson Garcés

2
@ JohnPeterThompsonGarcés utilise le paramètre -NoNewWindow de la cmdlet start-process
mjsr

21

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

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


ptime a un petit bug. ptime renvoie toujours 0 comme niveau d'erreur, même si le programme "enfant" se
termine

Super simple et précis sortie.
Janpio

Semble fonctionner correctement dans Win10.
mardi

18

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\System32et 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.


cette invite ne fonctionnait pas, @echo off echo %time% < nul cmd /c %1 echo %time% < nul vous avez

Il n'y a pas de% de fermeture pour les paramètres de ligne de commande comme% 1. Est-ce ce que vous vouliez dire?
Andrew J. Brehm

2
Pourquoi voudriez-vous rediriger nul dans echo ? echone lit jamais l'entrée.
Joey

1
Vous pouvez passer cmd /c %1à cmd /c %*, afin de pouvoir enregistrer les guillemets pour les arguments de commande
stanleyxu2005

3

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

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

Je trouve l’invite de commande Windows plus ancienne et les scripts .bat sont plutôt limités comparés aux shells Unix, mais il existe quelques installations pour boucler des fichiers, etc. CommandWindows.com a quelques astuces

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


2

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

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


1

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:\>

1

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

L'avantage ptimeest que cela fonctionne comme la version unix et donne la sortie de la console, ce qui Measure-Command { XXX }n'est pas le cas (ou du moins je ne sais pas comment faire cela).


0

Il y a deux options différentes pour obtenir une commande 'time'. Ma préférence est simplement d' installer Cygwin (qui est livré avec une timecommande semblable à 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 à partir d’ 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

gnomon est une bonne solution si vous n’avez pas seulement besoin du temps d’exécution total d’une commande, mais aussi de lignes pour les mesures de lignes:

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 cours d'exécution npm install -g gnomon, utilisez-le simplement via command | gnomon.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.