Да, я могу воспроизвести поведение, которое вы наблюдали в Windows 7 с Python 2.6 и Python 2.7, но не в Windows 10 с Python 2.7.Размеры файлов timeout.exe
отличаются в Windows 7 и Windows 10, поэтому в этой команде произошли изменения.
Я считаю, что timeout
портится с указателем файла в STD_IN stream (дескриптор 0
), особенно потому, что он перемещает указатель для отображения обратного отсчета секунд (см. эту ветку: Очистите линию / переместите курсор, используя команду Timeout или аналогичную ).
Проблема возникает не только вместе с командой if
, она возникает, как только timeout
и вызов скрипта Python находятся в одном блоке кода, заключенном в скобки:
(
timeout 3
python test.py
)
та же проблема возникает, когда они находятся в одной строке:
timeout 3 & python test.py
Когда две командные строки находятся в отдельных строках без скобок, все работает нормально:
timeout 3
python test.py
Как только *Команда 1023 * заменена на pause
, которая также читает из STD_IN , все работает как положено:
(
pause
python test.py
)
Или также:
pause & python test.py
michael_heath уже предоставленохороший обходной путь в его ответ с использованием ping
.Однако это не может быть прервано нажатием клавиши, например timeout
(поэтому оно фактически эквивалентно timeout 3 /NOBREAK
).