Windows, эквивалентная UNIX-команде «время»


70

Итак, в Unix есть timeкоманда, которая позволяет пользователям определять время своего кода / других вещей. Мне было интересно, если в командной строке Windows есть что-нибудь подобное.

Кроме того, я задал предыдущий вопрос относительно командной строки Linux здесь . Можем ли мы сделать то же самое для Windows? Если так, то как?


2
В Windows есть стандартный cmd.exe, но если вы хотите что-то ближе к версии для Linux, получите PowerShell, это лучше.
Гильермо Силицео Труба

Я искал "время команды для окон" в Google на первый результат дает: http://stackoverflow.com/questions/673523/how-to-measure-execution-time-of-command-in-windows-command-line
Дэвид Мишель

Я на Windows 7, и я только что попробовал решение, опубликованное выше. Я получаю следующее сообщение об ошибке: Unable to query system performance data (c0000004). Я гуглил это, и у кого-то еще была та же самая проблема, но форум не предлагает решения. В любом случае, спасибо за предложение. Может кто-то предложить что-то для другой части?
performanceIsBliss

@eff, timeit.exe для сервера 2003 и XP AFAIK, я не думаю, что он совместим с 7.
Джон Т

Ответы:


57

Используйте Powershell

Measure-Command {start-process whateveryouwantexecute -Wait}

Отредактировано в соответствии с вашими потребностями @efficiencylsBliss:

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

Вот что я пробовал: Measure-Command {java test <inputfile> -Wait}. Я получил список статистики по времени, но не вывод из кода. Я делаю что-то неправильно?
эффективностьIsBliss

@efficiency: Вы забыли start-processкоманду.
Саша Чедыгов

Start-Process: не найден позиционный параметр, который принимает аргумент '. \ 6-8.txt'. В строке: 1 символ: 31 + Measure-Command {start-process <<<< java. \ Dancebattle. \ 6-8.txt -wait} + CategoryInfo: InvalidArgument: (:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound, Microsoft.PowerShell.Commands.StartProcessCommand`
efficiencyIsBliss

1
Я пытаюсь измерить время, необходимое для запуска скрипта Python, используя Measure-Command {start-process \Python27\python test.py -Wait}. Это открывает новое окно cmd для запуска процесса, но затем закрывает окно, когда он завершится. Я хотел бы также увидеть вывод скрипта, так как я могу держать окно открытым?
Джон Питер Томпсон Гарсес

2
@ JohnPeterThompsonGarcés использует параметр -NoNewWindow командлета start-process
mjsr

21

Я использую Win XP, почему- timeit.exeто у меня не работает. Я нашел другую альтернативу ptime:

ptime 1.0 - точно измерить время выполнения программы

ptime запустит любую указанную команду и параметры и измерит время выполнения (время выполнения) в секундах с точностью до 5 миллисекунд или лучше. Это автоматический таймер процесса или программный таймер, используемый для целей тестирования.


У ptime есть одна маленькая ошибка. ptime всегда возвращает 0 как уровень ошибки, даже если «дочерняя» программа завершает работу с ошибкой
Юра Шинкарев

Супер простой и точный вывод.
Январь

Кажется, отлично работает в Win10.
mivk

18

Вы можете немного обмануть с помощью пакетного сценария ...

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

Затем запустите вашу программу в качестве аргумента этого скрипта ...

таймер myprogram.exe

и для аргументов ...

таймер "myprogram.exe -sw1 -sw2"

пример вывода:

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

поместите пакетный скрипт где-нибудь в вашей переменной PATH, например, C:\Windows\System32и назовите его timer.cmd. Конечно, есть небольшой удар по производительности для разветвления второго экземпляра cmd, хотя он очень минимален


это приглашение не сработало, @echo off echo %time% < nul cmd /c %1 echo %time% < nul вы пропустили закрывающий% в переменной среды (?)

Не существует закрывающего% для параметров командной строки, таких как% 1. Это то, что вы имели в виду?
Эндрю Дж. Брем

2
Почему бы вы перенаправить nul в echo ? echoникогда не читает ввод.
Джои

1
Вы можете изменить cmd /c %1его cmd /c %*, чтобы сохранить кавычку для аргументов команды
stanleyxu2005

3

В timeWindows нет прямого эквивалента Unix .

В Университете Джорджии есть краткий список команд Windows для пользователей Unix

Я считаю, что более старая командная строка Windows и сценарии .bat довольно ограничены по сравнению с оболочками Unix, но есть некоторые средства для циклического перебора файлов и т. Д. CommandWindows.com имеет несколько советов

Вы можете либо установить bashна Windows (например, установив CygWin), либо изучить Windows Powershell (который, как я предполагаю, имеет средство сделать что-то эквивалентное).


2

Вывод вашего кода может быть передан в файл: java test <inputfile> | Out-File d:\a.txt

Чтобы измерить, сколько времени это займет, вы должны инкапсулировать его в Measure-Commmand:

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


2

Если вы пытаетесь использовать PowerShell с Measure-Command, имейте в виду, что могут быть непредвиденные ошибки. Моя команда записывает двоичные данные в файл с помощью >перенаправления, но PowerShell добавляет спецификацию в начало файла и разрыв строки CRLF после каждой записи!


1

Немного кофе помогло мне придумать это:

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

И если вы хотите, чтобы он ничего не выводил, просто замените на out-null:

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

Вы используете это так:

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

Для удобства использования вот шоколадный пакет: https://chocolatey.org/packages/ptime C:/> choco install ptime

Преимущество if ptimeзаключается в том, что он действует как версия для Unix и выдает консольный вывод, чего Measure-Command { XXX }не происходит (или, по крайней мере, я не знаю, как это сделать).


0

Есть несколько вариантов получения команды «время». Я предпочитаю просто установить Cygwin (которая поставляется с UNIX-подобной timeкомандой).

Кроме того, вы можете написать сценарий и добавить его в свой путь (чтобы вы могли выполнить его без указания всего пути).

Если у вас есть Powershell , попробуйте этот скрипт (работает при вызове файлов - '. Exe' и т. Д.):

$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

Запустите код с (например):

time.ps1 python program.py

Используя пакет , я бы предложил один из лучших ответов здесь (на Stackoverflow.com) . Оба должны быть скопированы. Обратите внимание, что если вы используете решение paxdiablo , вы должны заменить

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

с участием

%*

0

Gnomon - хорошее решение, если вам требуется не только общее время выполнения команды, но и строка для линейных измерений:

Утилита командной строки для добавления метки времени к стандартному выводу другой команды. Полезно для длительных процессов, где вы хотите получить исторический отчет о том, что занимает так много времени.

Установленный путем запуска npm install -g gnomon, а затем просто использовать его с помощью command | gnomon.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.