The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Команда time вывод в мс."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Команда time вывод в мс."  +/
Сообщение от evi (?), 04-Сен-24, 12:23 
Здравствуйте!

При использовании команды time --format хочу вывод времени в милисекундах при форматированном выводе.

Если использовать команду без аргументов, команда выводит следующим образом _и_такой_вывод_меня_устраивает_:
# time ./my_prog < input.txt
> real    0m0,058s
> user    0m0,019s
> sys    0m0,040s

Но для использования флагов, необходимо использовать абсолютный путь, но от этого меняется формат вывода по default как указано в man 1 time (переменная окружения $TIME не задана), а точность указывается на один порядок меньше:
# /bin/time ./my_prog < input.txt
> 0.02user 0.02system 0:00.05elapsed 96%CPU (0avgtext+0avgdata 2428maxresident)k
> 0inputs+0outputs (0major+302minor)pagefaults 0swaps

Далее проделываю использую флаги -p или -f и вывод тоже с точностью на порядок меньше:
# /bin/time -p ./my_prog < input.txt
> real 0.05
> user 0.02
> sys 0.03

# /bin/time -f "real\t%e\nuser\t%U\nsys\t%S" ./my_prog < input.txt
> real 0.05
> user 0.02
> sys 0.03

#

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Команда time вывод в мс."  +/
Сообщение от pavel_simple. (?), 04-Сен-24, 14:23 
>[оверквотинг удален]
> на порядок меньше:
> # /bin/time -p ./my_prog < input.txt
>> real 0.05
>> user 0.02
>> sys 0.03
> # /bin/time -f "real\t%e\nuser\t%U\nsys\t%S" ./my_prog < input.txt
>> real 0.05
>> user 0.02
>> sys 0.03
> #

и снова третье сентября

Ответить | Правка | Наверх | Cообщить модератору

2. "Команда time вывод в мс."  +/
Сообщение от Аноним (2), 04-Сен-24, 22:42 
-f "real %6.3f\nuser %6.3f\nsys %6.3f\n"

А вообще, какую time и в какой ОС используете?

Ответить | Правка | Наверх | Cообщить модератору

3. "Команда time вывод в мс."  +/
Сообщение от evi (?), 04-Сен-24, 22:53 
> -f "real %6.3f\nuser %6.3f\nsys %6.3f\n"

Не работает, что естественно. "A percent sign (`%') in the format string causes the character to be interpreted as a resource specifier, which is similar to the formatting characters in the printf(3) function."

> А вообще, какую time и в какой ОС используете?

Linux. Lubuntu. В теме Unix стоит. :)

Ответить | Правка | Наверх | Cообщить модератору

4. "Команда time вывод в мс."  +/
Сообщение от Аноним (4), 06-Сен-24, 18:01 
В моей системе GNU time 1.7 .
Скачал исходный текст этой программы с
https://ftp.gnu.org/gnu/time/

Там точность жёстко забита в 2 цифры после точки:

        case 'S':        /* System time.  */
          fprintf (fp, "%ld.%02ld",
               resp->ru.ru_stime.tv_sec,
               resp->ru.ru_stime.TV_MSEC / 10);
          break;
        case 'U':        /* User time.  */
          fprintf (fp, "%ld.%02ld",
               resp->ru.ru_utime.tv_sec,
               resp->ru.ru_utime.TV_MSEC / 10);
          break;

так что, надо программу модифицировать.
Или использовать Python:

from datetime import datetime
date_start = datetime.now()

Что- то запускаете

print('Продолжительность работы    ', datetime.now() - date_start)

Ответить | Правка | Наверх | Cообщить модератору

5. "Команда time вывод в мс."  +/
Сообщение от evi (?), 08-Сен-24, 23:51 
> В моей системе GNU time 1.7 .
> Скачал исходный текст этой программы с
> https://ftp.gnu.org/gnu/time/
> Там точность жёстко забита в 2 цифры после точки:

Тоже глянул. Действительно. А ещё оказывается есть time как shell keyword, которое вшито в ядро и оно умеет в ms. А есть /bin/time -- отдельный бинарник. В итоге, это две разные команды.

Спасибо большое!


Ответить | Правка | Наверх | Cообщить модератору

6. "Команда time вывод в мс."  +/
Сообщение от Аноним (6), 09-Сен-24, 13:53 
>А ещё оказывается есть time как shell keyword, которое
> вшито в ядро и оно умеет в ms. А есть /bin/time
> -- отдельный бинарник. В итоге, это две разные команды.

у меня:
$ type time
time является /usr/bin/time

то есть в моей системе нет time как команды shell .
Зато есть команда shell 'times':
"times  Print  the  accumulated  user and system times for the shell and for pro‐
              cesses run from the shell."

Проверим:
$ times date
0m0.039s 0m0.005s
0m0.000s 0m0.000s

Работает.

Ответить | Правка | Наверх | Cообщить модератору

7. "Команда time вывод в мс."  +/
Сообщение от evi (?), 09-Сен-24, 17:44 
> у меня:
> $ type time
> time является /usr/bin/time

У меня:
$ type time
time is a shell keyword

$ man bash
...
RESERVED WORDS
       Reserved words are words that have a special meaning to the shell.  The  follow‐
       ing  words are recognized as reserved when unquoted and either the first word of
       a command (see SHELL GRAMMAR below), the third word of a case or select  command
       (only  in  is  valid),  or  the  third word of a for command (only in and do are
       valid):

       ! case  coproc  do done elif else esac fi for function if in select  then  until
       while { } time [[ ]]q
...

> то есть в моей системе нет time как команды shell .
> Зато есть команда shell 'times':

$time sleep 3
real    0m3,012s
user    0m0,003s
sys    0m0,009s

$ /bin/time -p sleep 3
real 3.00
user 0.00
sys 0.00

$times sleep 3
0m0,353s 0m0,287s
0m19,345s 0m4,564s

Что-то эта команда другое делает. Не хочу разбираться. :-)

Почитать про сам time, который is shell keyword, можно так:
help time

Меня вполне устраивает по своему результату конструкция:
$time ./my_prog < input.txt > /dev/null

Но проблема в том, что в рамках скрипта #!/bin/sh, почему-то срабатывает /bin/time...

Ответить | Правка | Наверх | Cообщить модератору

8. "Команда time вывод в мс."  +/
Сообщение от Аноним (8), 09-Сен-24, 19:56 
Да, times не для хронометража.
А какая оболочка?
Запустите
echo $SHELL

А сценарии запускать можно с шебангом
#!/bin/bash

может тогда сработает. А если не получится - в принципе несложно модифицировать GNU time, исходный текст же есть. Надо только установить компилятор (gcc), build-essentials, make.

Ответить | Правка | Наверх | Cообщить модератору

9. "Команда time вывод в мс."  +/
Сообщение от evi (?), 09-Сен-24, 20:15 
> А сценарии запускать можно с шебангом
> #!/bin/bash

Да, так и сделал. Заработало, но не всё гладко.

Есть скрипт runtest.sh, в нём есть уже известная строка:
time ./my_prog < input.txt > /dev/null

Проблема что когда конвеером передаю в less:
$ ./runtest | less

Во время листинга (j, k, gg, G) исчезают строки которые вернула команда time. Вывод команды явно идёт не в stdout. Есть какая-то возможность определить какой номер потока у неё (если он, конечно, есть)?

Ответить | Правка | Наверх | Cообщить модератору

10. "Команда time вывод в мс."  +/
Сообщение от evi (ok), 09-Сен-24, 22:40 
> Во время листинга (j, k, gg, G) исчезают строки которые вернула команда
> time. Вывод команды явно идёт не в stdout. Есть какая-то возможность
> определить какой номер потока у неё (если он, конечно, есть)?

У /bin/time выводится в stderr. Куда выводится у bash'овского time пока загадка.

190 /* Output stream, stderr by default.  */                                        
191 static FILE *outfp;
...
650   outfp = stderr;

Ответить | Правка | Наверх | Cообщить модератору

11. "Команда time вывод в мс."  +/
Сообщение от evi (ok), 09-Сен-24, 23:50 
> Куда выводится у bash'овского time пока загадка.

Проверил исходники bash, файл execute_cmd.c. Там есть подпрограмма, которая судя по всему и выводит время на экран:
static void print_formatted_time (fp, format, rs, rsf, us, usf, ss, ssf, cpu)  

И я нашёл только один вызов данной подпрограммы:
1464     print_formatted_time (stderr, time_format, rs, rsf, us, usf, ss, ssf, cpu);

Но при этом данная конструкция не работает:
$time echo test 2> /dev/null
test

real    0m0.000s
user    0m0.000s
sys    0m0.000s


Ответить | Правка | Наверх | Cообщить модератору

12. "Команда time вывод в мс."  +/
Сообщение от evi (ok), 09-Сен-24, 23:57 
> Но при этом данная конструкция не работает:
> $time echo test 2> /dev/null

Всё, победа! Надо было просто экранировать.

${ time echo test; } 2> /dev/null
test
$

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру