Windows equivalente al comando "time" di UNIX


70

Quindi, Unix ha un timecomando che consente agli utenti di cronometrare il loro codice / altre cose. Mi chiedevo se la riga di comando di Windows avesse qualcosa di simile.

Inoltre, ho posto una domanda precedente sulla riga di comando di Linux qui . Possiamo fare lo stesso per Windows? Se é cosi, come?


2
Windows ha il cmd.exe standard, ma se vuoi qualcosa di più vicino alla versione di Linux ottieni PowerShell, è molto meglio.
Guillermo Siliceo Trueba,


Sono su Windows 7 e ho appena provato la soluzione pubblicata sopra. Ottengo il seguente errore: Unable to query system performance data (c0000004). L'ho cercato su Google e qualcun altro ha avuto lo stesso identico problema, ma il forum non suggerisce alcuna soluzione. Grazie comunque per il suggerimento. Qualcuno può suggerire qualcosa per l'altra parte?
efficientIsBliss

@eff, timeit.exe è per server 2003 e XP AFAIK, non credo sia compatibile con 7.
John T

Risposte:


57

Usa Powershell

Measure-Command {start-process whateveryouwantexecute -Wait}

Modificato in base alle tue necessità @efficiencylsBliss:

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

Ecco quello che ho provato: Measure-Command {java test <inputfile> -Wait}. Ho ottenuto un elenco di statistiche relative al tempo, ma non l'output del codice. Sto facendo qualcosa di sbagliato?
efficienzaIsBliss

@efficienza: hai dimenticato il start-processcomando.
Sasha Chedygov,

Processo di avvio: impossibile trovare un parametro posizionale che accetta l'argomento '. \ 6-8.txt'. Alla riga: 1 carattere: 31 + Measure-Command {start-process <<<< java. \ Dancebattle. \ 6-8.txt -wait} + CategoryInfo: InvalidArgument: (:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound, Microsoft.PowerShell.Commands.StartProcessCommand`
efficienzaIsBliss

1
Sto cercando di misurare il tempo impiegato per eseguire uno script Python utilizzando Measure-Command {start-process \Python27\python test.py -Wait}. Questo apre una nuova finestra cmd per eseguire il processo, ma poi chiude la finestra al termine dell'esecuzione. Vorrei vedere anche l'output dello script, quindi come posso tenere aperta la finestra?
John Peter Thompson Garcés,

2
@ JohnPeterThompsonGarcés utilizza il parametro -NoNewWindow del cmdlet start-process
mjsr

21

Sto usando Win XP, per qualche motivo, timeit.exenon funziona per me. Ho trovato un'altra alternativa ptime:

ptime 1.0 - Misura accuratamente il tempo di esecuzione del programma

ptime eseguirà qualsiasi comando e parametro specificato e misurerà il tempo di esecuzione (tempo di esecuzione) in secondi, accurato a 5 millisecondi o meglio. È un timer di processo automatico, o timer di programma utilizzato a fini di benchmark.


ptime ha un piccolo bug. ptime restituisce sempre 0 come livello di errore, anche se il programma "figlio" esce con errore
Yura Shinkarev

Uscita super semplice e accurata.
Janpio,

Sembra funzionare bene in Win10.
lunedì

18

Puoi imbrogliare un po 'con uno script batch ...

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

Quindi esegui il tuo programma come argomento per questo script ...

timer myprogram.exe

e per argomenti ...

timer "myprogram.exe -sw1 -sw2"

esempio di output:

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

posizionare lo script batch da qualche parte nella variabile PATH, ad es. C:\Windows\System32e denominarlo timer.cmd. Ovviamente c'è un piccolo successo prestazionale nel biforcare una seconda istanza cmd, sebbene molto minimale.


quel prompt non funzionava, @echo off echo %time% < nul cmd /c %1 echo %time% < nul hai lasciato fuori la% di chiusura sulla variabile d'ambiente (?)

Non vi è alcuna chiusura% per i parametri della riga di comando come% 1. È quello che volevi dire?
Andrew J. Brehm,

2
Perché dovresti reindirizzare nul in echo ? echonon legge mai input.
Joey,

1
È possibile modificare cmd /c %1in cmd /c %*, in modo da poter salvare le virgolette per gli argomenti dei comandi
stanleyxu2005,

3

Non esiste un equivalente diretto di Unix timesu Windows.

L'Università della Georgia ha un breve elenco di comandi di Windows per gli utenti Unix

Trovo che il vecchio prompt dei comandi di Windows e lo script .bat siano piuttosto limitati rispetto alle shell Unix, ma ci sono alcune funzionalità per il looping dei file, ecc. CommandWindows.com ha alcuni suggerimenti

Puoi installare bashsu Windows (ad esempio installando CygWin) o imparare Windows Powershell (che presumo abbia un mezzo per fare qualcosa di equivalente).


2

L'output per il tuo codice può essere reindirizzato a un file: java test <inputfile> | Out-File d:\a.txt

Per misurare quanto tempo è necessario incapsularlo in Measure-Commmand:

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


2

Se si tenta di utilizzare PowerShell con Measure-Command, tenere presente che potrebbero esserci dei gotcha imprevisti. Il mio comando scrive i dati binari in un file usando il >reindirizzamento, ma PowerShell ha aggiunto una DBA all'inizio del file e un'interruzione di riga CRLF dopo ogni scrittura!


1

Un po 'di caffè mi ha aiutato a trovare questo:

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

E se vuoi che non produca nulla, sostituiscilo con out-null:

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

Lo usi in questo modo:

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

Per facilità d'uso, ecco il pacchetto chocolatey: https://chocolatey.org/packages/ptime C:/> choco install ptime

Il vantaggio ptimeè che si comporta come la versione unix e produce l'output della console, il che Measure-Command { XXX }non lo fa (o almeno non so come farlo).


0

Ci sono un paio di opzioni diverse per ottenere un comando 'time'. La mia preferenza è installare Cygwin (che viene fornito con un timecomando simile a UNIX ).

In alternativa, puoi scrivere uno script e aggiungerlo al tuo percorso (in modo da poterlo eseguire senza specificare l'intero percorso).

Se hai Powershell disponibile, prova questo script (funziona quando si chiamano i file - '. Exe', ecc.):

$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

Esegui il codice con (ad esempio):

time.ps1 python program.py

Usando Batch , suggerirei una delle risposte migliori da qui (su Stackoverflow.com) . Entrambi devono solo essere incollati. Nota che se usi la soluzione di paxdiablo , dovresti sostituirla

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

con

%*

0

gnomon è una buona soluzione se non hai solo bisogno del tempo di esecuzione totale di un comando, ma anche di una linea per le misure della linea:

Un'utilità della riga di comando per anteporre le informazioni di data e ora all'output standard di un altro comando. Utile per i processi di lunga durata in cui desideri un record storico di ciò che richiede così tanto tempo.

Installato eseguendo npm install -g gnomon, quindi basta usarlo tramite command | gnomon.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.