UNIX "time" komutuna eşdeğer Windows


69

Bu nedenle, Unix, timekullanıcıların kodlarını / diğer şeylerini zamanlamalarını sağlayan bir komuta sahiptir. Windows komut satırında benzer bir şey olup olmadığını merak ediyordum.

Ayrıca, burada Linux komut satırı ile ilgili önceki bir soru sordum . Aynısını Windows için de yapabilir miyiz? Öyleyse nasıl?


2
Windows standart cmd.exe dosyasına sahiptir, ancak linux sürümüne daha yakın bir şey istiyorsanız powershell'i edinin.
Guillermo Siliceo Trueba


Windows 7'deyim ve yukarıda yayınlanan çözümü denedim. Aşağıdaki hatayı alıyorum: Unable to query system performance data (c0000004). Ben googled ve başka birinin de aynı sorunu vardı, ancak forumda hiçbir çözüm bulunmuyor. Yine de öneri için teşekkürler. Birisi diğer taraf için bir şey önerebilir mi?
verimlilikIsBliss

@eff, timeit.exe, sunucu 2003 ve XP AFAIK içindir, 7 ile uyumlu olduğunu sanmıyorum.
John T

Yanıtlar:


57

Powershell kullanın

Measure-Command {start-process whateveryouwantexecute -Wait}

İhtiyacınız için @efficiencylsBliss düzenlendi:

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

İşte denedim ne: Measure-Command {java test <inputfile> -Wait}. Zamanla ilgili istatistiklerin bir listesini aldım ancak kodun çıktısını almadım. Yanlış bir şey mi yapıyorum?
verimlilikIsBliss

@efficiency: start-processKomutu unuttun .
Sasha Chedygov

Start-Process: '. \ 6-8.txt' argümanını kabul eden bir konumsal parametre bulunamıyor. Satırda: 1 karakter: 31 + Ölçü-Komutu {start-işlem <<<< java. \ Dancebattle. \ 6-8.txt -wait} + CategoryInfo: InvalidArgument: (:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound, Microsoft.PowerShell.Commands.StartProcessCommand`
verimlilikIsBliss

1
Kullanarak bir Python betiğini çalıştırmak için gereken süreyi ölçmeye çalışıyorum Measure-Command {start-process \Python27\python test.py -Wait}. Bu, işlemi çalıştırmak için yeni bir cmd penceresi açar, ancak işlem tamamlandığında pencereyi kapatır. Senaryonun çıktısını da görmek isterdim, o zaman pencereyi nasıl açık tutabilirim?
John Peter Thompson Garcés

2
@ JohnPeterThompsonGarcés, başlangıç ​​işlemi cmdlet'in -NoNewWindow parametresini kullanır
mjsr

21

Win XP kullanıyorum, nedense timeit.exebenim için çalışmıyor. Başka bir alternatif buldum ptime:

ptime 1.0 - Program yürütme süresini doğru bir şekilde ölçün

ptime belirtilen herhangi bir komutu ve parametreyi çalıştıracak ve yürütme süresini (çalışma süresi) 5 milisaniyede veya daha iyi olacak şekilde saniye cinsinden ölçecektir. Bir otomatik işlem zamanlayıcısı veya kıyaslama amaçları için kullanılan program zamanlayıcısıdır.


ptime'ın küçük bir böceği var. ptime daima "child" programı hatalı şekilde çıksa bile hata seviyesi olarak 0 değerini döndürdü
Yura Shinkarev

Süper basit ve doğru çıktı.
janpio

Win10'da iyi çalışıyor gibi görünüyor.
mivk

18

Toplu komut dosyası ile biraz hile yapabilirsiniz ...

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

Ardından, programınızı bu betiğin argümanı olarak çalıştırın ...

zamanlayıcı myprogram.exe

ve tartışmalar için ...

zamanlayıcı "myprogram.exe -sw1 -sw2"

Örnek çıktı:

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

toplu iş komut dosyasını PATH değişkeninizde bir yere yerleştirin, örneğin C:\Windows\System32ve adlandırın timer.cmd. Tabii ki çok düşük olmasına rağmen, ikinci bir cmd örneğini oluşturmak için küçük bir performans vuruşu var.


bu istem işe yaramazsa, @echo off echo %time% < nul cmd /c %1 echo %time% < nul çevre değişkenindeki kapanış%

% 1 gibi komut satırı parametreleri için kapanış% yok. Demek istediğin bu muydu?
Andrew J. Brehm,

2
Neden nul içine yönlendirirsiniz echo? echohiç girdi okumaz.
Joey

1
Değişebilirsin cmd /c %1için cmd /c %*komut argümanlar için tırnak işareti kaydedebilirsiniz böylece,
stanleyxu2005

3

timeWindows'taki Unix'e doğrudan bir eşdeğer yoktur .

Georgia Üniversitesi, Unix kullanıcıları için kısa bir Windows komut listesine sahiptir.

Eski Windows komut istemini buluyorum ve .bat komut dosyası Unix kabukları ile karşılaştırıldığında oldukça sınırlı, ancak dosyalar üzerinde döngü yapmak için bazı imkanlar var. CommandWindows.com bazı ipuçları

Ya bashWindows'a kurabilir (örn. CygWin'i kurarak) ya da Windows Powershell'i (eşdeğer bir şey yapmanın bir yolu olduğunu varsaydığımı) öğrenebilirsiniz.


2

Kodunuzun çıktısı bir dosyaya aktarılabilir: java test <inputfile> | Out-File d:\a.txt

Ne kadar sürdüğünü ölçmek için, onu Measure-Commmand içinde saklamanız gerekir:

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


2

PowerShell'i Measure-Command ile kullanmaya çalışırsanız, bazı beklenmedik getchalar olabileceğini unutmayın. Benim komut kullanarak bir dosyaya ikili veri yazar >yönlendirmeyi ama PowerShell bir katma BOM dosyasının başında ve her yazma sonra CRLF satır sonu için!


1

Biraz kahve bu konuda gelmeme yardımcı oldu:

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

Ve hiçbir şey çıktısını almak istemiyorsanız, sadece null ile değiştirin:

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

Bunu böyle kullanıyorsun:

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

Kullanım kolaylığı için, işte çikolata paketi: https://chocolatey.org/packages/ptime C:/> choco install ptime

Bunun avantajı ptime, unix versiyonu gibi davranması ve konsol çıktısını Measure-Command { XXX }vermemesidir (ya da en azından bunu nasıl yapacağımı bilmiyorum).


0

'Zaman' komutu almak için birkaç farklı seçenek var. Tercihim sadece bir UNIX benzeri komutla gelen Cygwin'i kurmaktime .

Alternatif olarak, bir komut dosyası yazıp onu yolunuza ekleyebilirsiniz (böylece tüm yolu belirtmeden onu çalıştırabilirsiniz).

Powershell'e sahipseniz , bu betiği deneyin (dosyaları çağırırken çalışır - '. Exe', vb.):

$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

Kodu ile çalıştırın (örneğin):

time.ps1 python program.py

Kullanılması Toplu ben üst cevaplar birini öneririm burada (stackoverflow.com üzerine) . Her ikisi de sadece kopyalanmalıdır. Eğer kullanırsanız unutmayın paxdiablo en çözümünü , değiştirmek gerekir

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

ile

%*

0

gnomon sadece bir komutun toplam çalışma süresine ihtiyaç duymuyorsanız, aynı zamanda hat ölçümleri için satırına ihtiyacınız olursa iyi bir çözümdür:

Zaman damgası bilgilerini başka bir komutun standart çıktısına hazırlamak için bir komut satırı yardımcı programı. Neyin uzun sürdüğünü gösteren tarihsel bir kayıt istediğiniz uzun süren işlemler için kullanışlıdır.

Çalıştırarak yükleyin npm install -g gnomon, sonra sadece kullanın command | gnomon.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.