Windows equivalente al comando "tiempo" de UNIX


70

Entonces, Unix tiene un timecomando que permite a los usuarios cronometrar su código / otras cosas. Me preguntaba si la línea de comandos de Windows tiene algo similar.

Además, hice una pregunta anterior con respecto a la línea de comandos de Linux aquí . ¿Podemos hacer lo mismo para Windows? ¿Si es así, cómo?


2
Windows tiene el cmd.exe estándar, pero si quieres algo más cercano a la versión de Linux, obtén el PowerShell, es mucho mejor.
Guillermo Siliceo Trueba

Busqué "tiempo de comando para Windows" en Google en el primer resultado que da: http://stackoverflow.com/questions/673523/how-to-measure-execution-time-of-command-in-windows-command-line
David Michel

Estoy en Windows 7 y acabo de probar la solución publicada anteriormente. Me sale el siguiente error: Unable to query system performance data (c0000004). Lo busqué en Google y alguien más tuvo exactamente el mismo problema, pero el foro no sugiere ninguna solución. Gracias por la sugerencia de todos modos. ¿Alguien puede sugerir algo para la otra parte?
efficiencyIsBliss

@eff, timeit.exe es para el servidor 2003 y XP AFAIK, no creo que sea compatible con 7.
John T

Respuestas:


57

Use Powershell

Measure-Command {start-process whateveryouwantexecute -Wait}

Editado según sus necesidades @efficiencylsBliss:

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

Esto es lo que he intentado: Measure-Command {java test <inputfile> -Wait}. Obtuve una lista de estadísticas relacionadas con el tiempo, pero no la salida del código. ¿Estoy haciendo algo mal?
efficiencyIsBliss

@efficiency: Olvidó el start-processcomando.
Sasha Chedygov

Proceso de inicio: no se puede encontrar un parámetro posicional que acepte el argumento '. \ 6-8.txt'. En la línea: 1 char: 31 + Measure-Command {start-process <<<< java. \ Dancebattle. \ 6-8.txt -wait} + CategoryInfo: InvalidArgument: (:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound, Microsoft.PowerShell.Commands.StartProcessCommand`
eficienciaIsBliss

1
Estoy tratando de medir el tiempo que lleva ejecutar un script Python usando Measure-Command {start-process \Python27\python test.py -Wait}. Esto abre una nueva ventana de cmd para ejecutar el proceso, pero luego cierra la ventana cuando termina de ejecutarse. También me gustaría ver el resultado del script, entonces, ¿cómo puedo mantener la ventana abierta?
John Peter Thompson Garcés

2
@ JohnPeterThompsonGarcés usa el parámetro -NoNewWindow del cmdlet de inicio del proceso
mjsr

21

Estoy usando Win XP, por alguna razón, timeit.exeno funciona para mí. Encontré otra alternativa ptime:

ptime 1.0: mide con precisión el tiempo de ejecución del programa

ptime ejecutará cualquier comando y parámetro especificado, y medirá el tiempo de ejecución (tiempo de ejecución) en segundos, con una precisión de 5 milisegundos o mejor. Es un temporizador de proceso automático o temporizador de programa utilizado para fines de referencia.


ptime tiene un pequeño error. ptime siempre devuelve 0 como nivel de error, incluso si el programa "hijo" sale con error
Yura Shinkarev

Salida súper simple y precisa.
enero

Parece funcionar bien en Win10.
mivk

18

Puedes hacer trampa un poco con un script por lotes ...

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

Luego ejecute su programa como argumento para este script ...

timer myprogram.exe

y para argumentos ...

temporizador "myprogram.exe -sw1 -sw2"

salida de ejemplo:

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

coloque el script por lotes en algún lugar de su variable PATH, por ejemplo, C:\Windows\System32y asígnele un nombre timer.cmd. Por supuesto, hay un pequeño impacto en el rendimiento de bifurcar una segunda instancia de cmd, aunque muy mínimo.


ese aviso no funcionaría, @echo off echo %time% < nul cmd /c %1 echo %time% < nul

No hay% de cierre para los parámetros de la línea de comandos como% 1. ¿Es eso lo que querías decir?
Andrew J. Brehm

2
¿Por qué le redirigir nul a echo ? echonunca lee la entrada.
Joey

1
Puede cambiar cmd /c %1a cmd /c %*, para que pueda guardar las comillas para los argumentos del comando
stanleyxu2005

3

No hay un equivalente directo a Unix timeen Windows.

La Universidad de Georgia tiene una breve lista de comandos de Windows para usuarios de Unix

Encuentro el símbolo del sistema de Windows anterior y las secuencias de comandos .bat son bastante limitadas en comparación con los shells de Unix, pero hay algunas facilidades para recorrer archivos, etc. CommandWindows.com tiene algunos consejos

Puede instalarlo bashen Windows (por ejemplo, instalando CygWin) o aprender Windows Powershell (que supongo que tiene un medio para hacer algo equivalente).


2

La salida de su código se puede canalizar a un archivo: java test <inputfile> | Out-File d:\a.txt

Para medir cuánto tiempo lleva encapsularlo en Measure-Commmand:

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


2

Si intenta usar PowerShell con Measure-Command, tenga en cuenta que puede haber algunos problemas inesperados. ¡Mi comando escribe datos binarios en un archivo usando la >redirección, pero PowerShell agregó una lista de materiales al comienzo del archivo y un salto de línea CRLF después de cada escritura!


1

Un poco de café me ayudó a pensar en esto:

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

Y si no quiere que salga nada, simplemente reemplace con out-null:

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

Lo usas así:

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

Para facilitar su uso, aquí está el paquete de chocolate: https://chocolatey.org/packages/ptime C:/> choco install ptime

La ventaja ptimees que actúa como la versión Unix y produce la salida de la consola, que Measure-Command { XXX }no lo hace (o al menos no sé cómo hacerlo).


0

Hay un par de opciones diferentes para obtener un comando 'time'. Mi preferencia es simplemente instalar Cygwin (que viene con un timecomando similar a UNIX ).

Alternativamente, puede escribir un script y agregarlo a su ruta (para que pueda ejecutarlo sin especificar la ruta completa).

Si tiene Powershell disponible, pruebe este script (funciona al llamar archivos - '. 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

Ejecute el código con (por ejemplo):

time.ps1 python program.py

Usando Batch , sugeriría cualquiera de las mejores respuestas desde aquí (en Stackoverflow.com) . Ambos solo necesitan ser copiados. Tenga en cuenta que si usa la solución de paxdiablo , debe reemplazar

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

con

%*

0

gnomon es una buena solución si no solo necesita el tiempo de ejecución total de un comando, sino también líneas para mediciones de línea:

Una utilidad de línea de comandos para anteponer información de marca de tiempo a la salida estándar de otro comando. Útil para procesos de larga duración en los que desea un registro histórico de lo que lleva tanto tiempo.

Instalado ejecutando npm install -g gnomon, luego solo úselo a través de command | gnomon.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.