명령 프롬프트(CMD) 통합(Windows)¶
Windows 명령 프롬프트에서 STT(Speech-to-Text) CLI와 더 쉽게 상호 작용하려면 s.bat 배치 파일을 만들어 PATH에 배치할 수 있습니다. 이를 통해 CMD 창에 ‘질문’을 간단히 입력할 수 있습니다.
참고: CMD(cmd.exe)는 레거시 Windows 셸이며 PowerShell 또는 Unix 셸에 비해 상당한 제한이 있습니다. 보다 풍부한 경험을 위해서는 PowerShell Integration 또는 WSL Integration를 대신 사용하는 것이 좋습니다.
설정 지침¶
1. 개인 스크립트용 디렉터리를 만듭니다(아직 수행하지 않은 경우).¶
mkdir %USERPROFILE%\bin
2. 해당 디렉터리를 PATH에 추가합니다(일회성 설정).¶
시스템 속성 → 환경 변수를 열고 사용자 PATH 변수에 %USERPROFILE%\bin을 추가합니다.
또는 관리자 권한 CMD 프롬프트에서 이를 실행합니다(CMD를 다시 연 후에 적용됨).
setx PATH "%USERPROFILE%\bin;%PATH%"
3. 배치 파일 생성¶
메모장이나 텍스트 편집기를 열고 다음을 %USERPROFILE%\bin\s.bat로 저장합니다.
@echo off
:: --- STT Project Path Resolution ---
setlocal EnableDelayedExpansion
:: Check for arguments
if "%~1"=="" (
echo question ^<your question^>
exit /b 1
)
:: Collect all arguments into one string
set "QUERY=%*"
:: Call helper functions (must be defined or available on PATH)
call update_github_ip.bat
set SHORT_TIMEOUT_SECONDS=2
set LONG_TIMEOUT_SECONDS=70
:: Path shortcuts (adjust SL5NET_AURA_PROJECT_ROOT to your actual path if not set as env var)
set "PY_EXEC=%SL5NET_AURA_PROJECT_ROOT%\.venv\Scripts\python.exe"
set "CLI_SCRIPT=%SL5NET_AURA_PROJECT_ROOT%\scripts\py\cli_client.py"
:: Create a temp file
set "TEMP_FILE=%TEMP%\stt_output_%RANDOM%.txt"
set "TEMP_FILE_ERR=%TEMP%\stt_err_%RANDOM%.txt"
:: --- 1. First try (short timeout via 'timeout' workaround) ---
:: CMD has no built-in process timeout. We use 'start /wait' with a watchdog approach.
:: For a true timeout, PowerShell is called inline as a helper:
powershell -NoProfile -Command ^
"$proc = Start-Process -FilePath '%PY_EXEC%' ^
-ArgumentList '-u','%CLI_SCRIPT%','%QUERY%','--lang','de-DE','--unmasked' ^
-RedirectStandardOutput '%TEMP_FILE%' ^
-RedirectStandardError '%TEMP_FILE_ERR%' ^
-NoNewWindow -PassThru; ^
$done = $proc.WaitForExit(%SHORT_TIMEOUT_SECONDS%000); ^
if (-not $done) { $proc.Kill(); exit 124 } else { exit $proc.ExitCode }"
set EXIT_CODE=%ERRORLEVEL%
:: Read output
set "OUTPUT="
if exist "%TEMP_FILE%" (
set /p OUTPUT=<"%TEMP_FILE%"
del "%TEMP_FILE%" "%TEMP_FILE_ERR%" 2>nul
)
:: --- Service check ---
findstr /C:"Verbindungsfehler" "%TEMP_FILE%" >nul 2>&1
set CONN_ERR=%ERRORLEVEL%
tasklist /FI "IMAGENAME eq streamlit.exe" 2>nul | find /I "streamlit.exe" >nul
set STREAMLIT_RUNNING=%ERRORLEVEL%
if %CONN_ERR%==0 (goto :restart)
if %STREAMLIT_RUNNING% NEQ 0 (goto :restart)
goto :check_exit
:restart
echo Service-Check: Backend oder Frontend fehlt. Starte neu...
call start_service.bat
echo ++++++++++++++++++++++++++++++++++++++++++++++++++
set "KIWIX_SCRIPT=%SL5NET_AURA_PROJECT_ROOT%\config\maps\plugins\standard_actions\wikipedia_local\de-DE\kiwix-docker-start-if-not-running.sh"
if exist "%KIWIX_SCRIPT%" (
bash "%KIWIX_SCRIPT%"
)
echo ++++++++++++++++++++++++++++++++++++++++++++++++++
echo BITTE ERNEUT EINGEBEN: s %QUERY%
exit /b 1
:check_exit
if %EXIT_CODE%==124 (goto :long_timeout)
if %EXIT_CODE%==0 (
echo %OUTPUT%
exit /b 0
)
goto :error
:long_timeout
echo answer ^> %SHORT_TIMEOUT_SECONDS% sec. set Timeout= %LONG_TIMEOUT_SECONDS% s...
set "TEMP_FILE_2=%TEMP%\stt_output2_%RANDOM%.txt"
set "TEMP_FILE_2_ERR=%TEMP%\stt_err2_%RANDOM%.txt"
powershell -NoProfile -Command ^
"$proc = Start-Process -FilePath '%PY_EXEC%' ^
-ArgumentList '-u','%CLI_SCRIPT%','%QUERY%','--lang','de-DE','--unmasked' ^
-RedirectStandardOutput '%TEMP_FILE_2%' ^
-RedirectStandardError '%TEMP_FILE_2_ERR%' ^
-NoNewWindow -PassThru; ^
$done = $proc.WaitForExit(%LONG_TIMEOUT_SECONDS%000); ^
if (-not $done) { $proc.Kill(); exit 124 } else { exit $proc.ExitCode }"
set EXIT_CODE_2=%ERRORLEVEL%
if exist "%TEMP_FILE_2%" (
type "%TEMP_FILE_2%"
del "%TEMP_FILE_2%" "%TEMP_FILE_2_ERR%" 2>nul
)
if %EXIT_CODE_2% NEQ 0 (
echo WARNUNG: Timeout ^> %LONG_TIMEOUT_SECONDS% Sec.
)
exit /b 0
:error
echo ERROR
echo %OUTPUT%
exit /b %EXIT_CODE%
4. 테스트해 보세요¶
새 CMD 창을 열고(업데이트된 PATH가 로드됨) 다음을 입력합니다.
s your question here
CMD 관련 참고 사항¶
기본 프로세스 시간 초과 없음: CMD에는 Unix
timeout에 해당하는 기능이 없습니다. 이 스크립트는 시간 초과 논리를 PowerShell의WaitForExit에 인라인으로 위임합니다. PowerShell을 사용할 수 있어야 합니다(모든 최신 Windows 시스템에 있음).SL5NET_AURA_PROJECT_ROOT: 시스템 속성을 통해 이를 영구 사용자 환경 변수로 설정하거나.bat파일에 경로를 하드코딩합니다.도우미 스크립트:
update_github_ip.bat및start_service.bat는PATH또는%USERPROFILE%\bin에 있어야 합니다. 이는update_github_ip및start_service셸 함수에 해당하는 CMD입니다.Kiwix 스크립트용
bash: WSL이 설치된 경우 CMD에서bash를 사용할 수 있으며.sh스크립트가 직접 실행됩니다. 그렇지 않으면kiwix-docker-start-if-not-running.sh를.bat에 상응하는 것으로 조정하세요.견적 처리: CMD에는 엄격하고 깨지기 쉬운 인용 규칙이 있습니다. 쿼리에 특수 문자(
&,|,>,<)가 포함된 경우 전체 쿼리를 큰따옴표(s "your &question")로 묶습니다.set /p제한:set /p는 파일의 첫 번째 줄만 읽습니다. 여러 줄로 출력하려면 ‘type’을 사용하여 파일을 직접 인쇄하세요(장시간 제한 분기에서 수행된 것처럼).
특징¶
동적 경로:
SL5NET_AURA_PROJECT_ROOT환경 변수를 통해 경로를 자동으로 확인합니다.자동 재시작: 백엔드가 다운되면
start_service.bat을 호출하고 로컬 Wikipedia 서비스 시작을 시도합니다.스마트 타임아웃: 먼저 빠른 2초 응답을 시도한 다음 70초 심층 처리 모드로 돌아갑니다.