Windows equivalente ao comando "time" do UNIX


69

Portanto, o Unix possui um timecomando que permite aos usuários cronometrar seu código / outras coisas. Eu queria saber se a linha de comando do Windows tem algo semelhante.

Além disso, fiz uma pergunta anterior sobre a linha de comando do Linux aqui . Podemos fazer o mesmo com o Windows? Se sim, como?


2
O Windows possui o cmd.exe padrão, mas se você quiser algo mais próximo da versão Linux, obtenha o PowerShell, melhor.
Guillermo Siliceo Trueba 01/01

Eu procurei por "time de comando para windows" no google no primeiro resultado: http://stackoverflow.com/questions/673523/how-to-measure-execution-time-of-command-in-windows-command-line
David Michel

Estou no Windows 7 e tentei a solução postada acima. Eu recebo o seguinte erro: Unable to query system performance data (c0000004). Eu pesquisei no Google e alguém teve exatamente o mesmo problema, mas o fórum sugere nenhuma solução. Obrigado pela sugestão de qualquer maneira. Alguém pode sugerir algo para a outra parte?
efficiencyIsBliss

@eff, timeit.exe é para servidor 2003 e XP AFAIK, eu não acho que é compatível com 7.
John T

Respostas:


57

Use o PowerShell

Measure-Command {start-process whateveryouwantexecute -Wait}

Editado para sua necessidade @efficiencylsBliss:

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

Aqui está o que eu tentei: Measure-Command {java test <inputfile> -Wait}. Eu recebi uma lista de estatísticas relacionadas ao tempo, mas não a saída do código. Estou fazendo algo errado?
efficiencyIsBliss

@ Eficiência: Você esqueceu o start-processcomando.
Sasha Chedygov 02/01

Processo inicial: Não foi possível encontrar um parâmetro posicional que aceite o argumento '. \ 6-8.txt'. Na linha: 1 caractere: 31 + Comando de medida {processo de inicialização <<<< java. \ Dancebattle. \ 6-8.txt -wait} + CategoriaInfo: InvalidArgument: (:) [Processo de inicialização], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound, Microsoft.PowerShell.Commands.StartProcessCommand`
efficiencyIsBliss

11
Estou tentando medir o tempo que leva para executar um script Python usando Measure-Command {start-process \Python27\python test.py -Wait}. Isso abre uma nova janela do cmd para executar o processo, mas depois fecha a janela quando terminar de executar. Gostaria de ver também a saída do script, então como posso manter a janela aberta?
John Peter Thompson Garcés

2
@ JohnPeterThompsonGarcés usar o parâmetro -NoNewWindow do cmdlet-processo de start
mjsr

21

Estou usando o Win XP, por algum motivo, timeit.exenão está funcionando para mim. Encontrei outra alternativa ptime:

ptime 1.0 - Mede com precisão o tempo de execução do programa

O ptime executará qualquer comando e parâmetros especificados e medirá o tempo de execução (tempo de execução) em segundos, com precisão de 5 milissegundos ou melhor. É um cronômetro automático de processo ou programa usado para fins de benchmark.


ptime tem um pequeno bug. ptime sempre retornar 0 como nível de erro, mesmo se "criança" sair do programa com o erro
Yura Shinkarev

Saída super simples e precisa.
janpio

Parece funcionar bem no Win10.
Mivk

18

Você pode trapacear um pouco com um script em lote ...

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

Em seguida, execute seu programa como argumento para este script ...

timer myprogram.exe

e para argumentos ...

temporizador "myprogram.exe -sw1 -sw2"

saída de exemplo:

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

coloque o script em lote em algum lugar da variável PATH, por exemplo, C:\Windows\System32e nomeie-o timer.cmd. É claro que há um pequeno impacto no desempenho de criar uma segunda instância de cmd, embora muito mínima.


que prompt não iria funcionar, @echo off echo %time% < nul cmd /c %1 echo %time% < nul você deixou de fora o% fechando sobre a variável de ambiente (?)

Não há% de fechamento para parâmetros de linha de comando como% 1. É isso que você quis dizer?
Andrew J. Brehm

2
Por que você redirecionaria nul para echo ? echonunca lê entrada.
Joey

11
Você pode mudar cmd /c %1para cmd /c %*, de modo que você pode salvar aspas para argumentos de comando
stanleyxu2005

3

Não há equivalente direto ao Unix timeno Windows.

A Universidade da Geórgia tem uma breve lista de comandos do Windows para usuários do Unix

Acho que o prompt de comando mais antigo do Windows e os scripts .bat são bastante limitados em comparação com os shells do Unix, mas existem algumas facilidades para repetir arquivos etc. O CommandWindows.com tem algumas dicas

Você pode instalar bashno Windows (por exemplo, instalando o CygWin) ou aprender o Windows Powershell (que eu suponho que tenha um meio de fazer algo equivalente).


2

A saída do seu código pode ser canalizada para um arquivo: java test <inputfile> | Out-File d:\a.txt

Para medir quanto tempo leva, você deve encapsulá-lo no Measure-Commmand:

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


2

Se você tentar usar o PowerShell com o Measure-Command, saiba que pode haver algumas dicas inesperadas. Meu comando grava dados binários em um arquivo usando o >redirecionamento, mas o PowerShell adicionou uma lista técnica ao início do arquivo e uma quebra de linha CRLF após cada gravação!


1

Um pouco de café me ajudou a pensar nisso:

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

E se você deseja que ele não produza nada, substitua por out-null:

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

Você usa assim:

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 o uso, aqui está o pacote com chocolate: https://chocolatey.org/packages/ptime C:/> choco install ptime

A vantagem ptimeé que ele age como a versão unix e produz a saída do console, o que Measure-Command { XXX }não ocorre (ou pelo menos eu não sei como fazer isso).


0

Existem algumas opções diferentes para obter um comando 'time'. Minha preferência é apenas instalar o Cygwin (que vem com um timecomando semelhante ao UNIX ).

Como alternativa, você pode escrever um script e adicioná-lo ao seu caminho (para que você possa executá-lo sem especificar o caminho inteiro).

Se você tiver o Powershell disponível, tente este script (funciona ao chamar arquivos - '.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

Execute o código com (por exemplo):

time.ps1 python program.py

Usando o Lote , sugiro uma das principais respostas aqui (no Stackoverflow.com) . Ambos precisam ser copiados e colados. Observe que se você usar a solução de paxdiablo , deverá substituir

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

com

%*

0

O gnomon é uma boa solução se você não precisa apenas do tempo total de execução de um comando, mas também da linha para medições de linha:

Um utilitário de linha de comando para acrescentar informações de registro de data e hora à saída padrão de outro comando. Útil para processos de longa execução, nos quais você deseja um registro histórico do que está demorando tanto.

Instalado executando npm install -g gnomon, basta usá-lo via command | gnomon.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.