[python] 배치 파일에서 자

Windows 상자에서 무언가를 자동화하기 위해 배치 파일을 작성할 때 몇 초 동안 (보통 테스트 / 대기 루프에서 프로세스가 시작될 때까지) 실행을 일시 중지해야했습니다. 당시 내가 찾은 최고의 솔루션은 핑을 사용하여 원하는 효과를 얻습니다. 다음과 같이 구현 된 호출 가능한 “wait.bat”를 설명하는 여기 에서 더 나은 작성을 발견했습니다 .

@ping 127.0.0.1 -n 2 -w 1000 > nul
@ping 127.0.0.1 -n %1% -w 1000> nul

그런 다음 대기 시간 (초)을 지나서 고유 한 배치 파일에 wait.bat 호출을 포함시킬 수 있습니다.

분명히 Windows 2003 Resource Kit는 유닉스와 같은 절전 명령을 제공합니다 (마지막으로!). 한편, 여전히 Windows XP, Windows 2000 또는 (슬프게도) Windows NT 를 사용하는 사람들에게는 더 좋은 방법이 있습니까?

허용 된 답변sleep.py 에서 스크립트를 수정하여 명령 줄에 인수가 전달되지 않으면 기본적으로 1 초로 설정되었습니다.

import time, sys

time.sleep(float(sys.argv[1]) if len(sys.argv) > 1 else 1)



답변

최신 정보

timeout다른에 설명 된대로 이후 윈도우 비스타에서 사용할 수 있으며 명령, 명령, 사용되어야한다 대답 이 질문에. 여기에 오는 것은 오래된 대답입니다.

이전 답변

파이썬이 설치되어 있거나 설치에 신경 쓰지 않는다면 (다른 용도도 있습니다 🙂 다음 sleep.py 스크립트를 만들고 PATH 어딘가에 추가하십시오.

import time, sys

time.sleep(float(sys.argv[1]))

필요한 경우 1 초 미만의 일시 중지 (예 : 1.5 초, 0.1 등)가 가능합니다. 을 호출하지 sleep않고 PATHEXT 환경 변수에 확장자를 sleep.py추가 할 수 있습니다 .PY. Windows XP에서는 다음에서 편집 할 수 있습니다.

내 컴퓨터 → 속성 (메뉴) → 고급 (탭) → 환경 변수 (버튼) → 시스템 변수 (프레임)


답변

timeout명령은 Windows Vista 이상에서 사용할 수 있습니다.

c:\> timeout /?

TIMEOUT [/T] timeout [/NOBREAK]

Description:
    This utility accepts a timeout parameter to wait for the specified
    time period (in seconds) or until any key is pressed. It also
    accepts a parameter to ignore the key press.

Parameter List:
    /T        timeout       Specifies the number of seconds to wait.
                            Valid range is -1 to 99999 seconds.

    /NOBREAK                Ignore key presses and wait specified time.

    /?                      Displays this help message.

NOTE: A timeout value of -1 means to wait indefinitely for a key press.

Examples:
    TIMEOUT /?
    TIMEOUT /T 10
    TIMEOUT /T 300 /NOBREAK
    TIMEOUT /T -1

참고 : 입력 리디렉션에서는 작동하지 않습니다. 간단한 예 :

C:\>echo 1 | timeout /t 1 /nobreak
ERROR: Input redirection is not supported, exiting the process immediately.


답변

ping요약 된 방법을 사용하는 것은 더 많은 실행 파일을 추가하거나 다른 소프트웨어를 설치할 수 없거나 원하지 않을 때 수행하는 방법입니다.

존재하지 않는 것을 핑 (ping)해야하고, -w그 시간이 지나면 (localhost와 같은) 시간 있는 핑을하지 않고 플래그가 해당 시간 후에 실패하도록해야합니다 -n. 이렇게하면 1 초 미만의 시간을 처리 할 수 ​​있으며 약간 더 정확하다고 생각합니다.

예 :

(1.1.1.1이 취해지지 않은 테스트)

ECHO Waiting 15 seconds

PING 1.1.1.1 -n 1 -w 15000 > NUL
  or
PING -n 15 -w 1000 127.1 >NUL


답변

SLEEP.exeWindows XP에도 설치할 수있는 Windows Server 2003 Resource Kit 와 같은 대부분의 Resource Kit에 포함되어 있습니다.

Usage:  sleep      time-to-sleep-in-seconds
        sleep [-m] time-to-sleep-in-milliseconds
        sleep [-c] commited-memory ratio (1%-100%)


답변

여기에서 찾은 답변에 동의하지 않습니다.

배치 파일에서 지연을 수행하기 위해 Windows XP 기능을 완전히 기반으로 한 다음 방법을 사용합니다.

DELAY.BAT :

@ECHO OFF
REM DELAY seconds

REM GET ENDING SECOND
FOR /F "TOKENS=1-3 DELIMS=:." %%A IN ("%TIME%") DO SET /A H=%%A, M=1%%B%%100, S=1%%C%%100, ENDING=(H*60+M)*60+S+%1

REM WAIT FOR SUCH A SECOND
:WAIT
FOR /F "TOKENS=1-3 DELIMS=:." %%A IN ("%TIME%") DO SET /A H=%%A, M=1%%B%%100, S=1%%C%%100, CURRENT=(H*60+M)*60+S
IF %CURRENT% LSS %ENDING% GOTO WAIT

지연 간격이 자정을 지날 때도 방법이 작동하도록 계산에 요일을 삽입 할 수도 있습니다.


답변

비슷한 문제에 직면했지만 동일한 작업을 수행하기 위해 매우 짧은 C ++ 콘솔 응용 프로그램을 중단했습니다. 전체 리소스 키트를 다운로드 / 설치하는 것보다 MySleep.exe 1000을 실행하기 만하면 됩니다.

#include <tchar.h>
#include <stdio.h>
#include "Windows.h"

int _tmain(int argc, _TCHAR* argv[])
{
    if (argc == 2)
    {
        _tprintf(_T("Sleeping for %s ms\n"), argv[1]);
        Sleep(_tstoi(argv[1]));
    }
    else
    {
        _tprintf(_T("Wrong number of arguments.\n"));
    }
    return 0;
}


답변

서버 결함에서 비슷한 질문이 있었고 해결책 은 다음 과 같습니다.

choice /d y /t 5 > nul