Как задать время выполнения команды N раз (и иметь возможность использовать CTRL-C для ее остановки)

Это должно обрабатывать любой не -цифровой разделитель (0 -9 ). Пример:

x='1!4!3!5!2'; delim=$(echo "$x" | tr -d 0-9 | cut -b1); echo "$x" | tr "$delim" '\n' | sort -g | tr '\n' "$delim" | sed "s/$delim$/\n/"

Выход:

1!2!3!4!5
3
11.06.2020, 17:16
3 ответа

Это не решение "Ctrl+C", но что-то, если вы хотите "изящно" остановить длинную последовательность циклов. Все, что вам нужно сделать, это создать файл ./stop-foo-py; с $ echo "" >./stop-foo-pyнапример (в другом терминале ).

rm./stop-foo-py
time for ((i=0;i<1000;i++));
    do if [ ! -f "./stop-foo-py" ]; then
        python foo.py ;
        fi ;
    done

или rm./stop-foo-py; time for ((i=0;i<1000;i++)); do if [ ! -f "./stop-foo-py" ]; then python foo.py ; fi ; doneв одну строку.

Он добавляет примерно половину мс на один цикл.

$ time for ((i=0;i<1000;i++)); do if [ ! -f "./stop" ]; then : ; fi ; done

real    0m0.548s
user    0m0.157s
sys     0m0.359s
1
28.04.2021, 23:21

Это невозможно с Ctrl-C, так как вы генерируете новые процессы в цикле. Вы должны были бы прервать их все, нажимая Ctrl-C100, 1000 раз быстрее, чем выполняется каждая итерация.
В качестве альтернативы вы можете добиться того же эффекта в bash, нажав Ctrl-Z, что остановит последний процесс переднего плана, созданный циклом, и выйдет из самого цикла.

1
28.04.2021, 23:21

Предполагая, что оболочка zsh, просто выполните:

time (repeat 10 python3 foo.py)

Это время процесса (и ожидания дочерних элементов ), которые запускают подоболочку, которая запускает команду python3 10 раз.

С помощью bashилиksh93(илиzsh)вы можете выполнить:

time (for ((i=0;i<10;i++)) { python3 foo.py; })

POSIXly вы можете сделать:

time -p sh -c '
  i=0; while [ "$i" -lt 10 ]; do
    python3 foo.py
    i=$((i + 1))
  done'
1
28.04.2021, 23:21

Теги

Похожие вопросы