Integração com prompt de comando (CMD) (Windows)¶
Para facilitar a interação com a CLI STT (Speech-to-Text) a partir do prompt de comando do Windows, você pode criar um arquivo em lote s.bat e colocá-lo em seu PATH. Isso permite que você simplesmente digite s "sua pergunta" em qualquer janela do CMD.
Observação: CMD (cmd.exe) é o shell herdado do Windows e tem limitações significativas em comparação aos shells PowerShell ou Unix. Para uma experiência mais rica, considere usar o PowerShell Integration ou o WSL Integration.
Instruções de configuração¶
1. Crie um diretório para seus scripts pessoais (se ainda não tiver feito isso)¶
mkdir %USERPROFILE%\bin
2. Adicione esse diretório ao seu PATH (configuração única)¶
Abra Propriedades do Sistema → Variáveis de Ambiente e adicione %USERPROFILE%\bin à variável PATH do seu usuário.
Como alternativa, execute-o em um prompt CMD elevado (entra em vigor após reabrir o CMD):
setx PATH "%USERPROFILE%\bin;%PATH%"
3. Crie o arquivo em lote¶
Abra o Bloco de Notas ou qualquer editor de texto e salve o seguinte como %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. Teste¶
Abra uma nova janela CMD (para que o PATH atualizado seja carregado) e digite:
CODE_BLOCO_3
Notas específicas do CMD¶
Sem tempo limite de processo nativo: CMD não tem equivalente ao
timeoutdo Unix. Este script delega a lógica de tempo limite embutida noWaitForExitdo PowerShell. O PowerShell deve estar disponível (está em todos os sistemas Windows modernos).SL5NET_AURA_PROJECT_ROOT: Defina isso como uma variável de ambiente de usuário permanente através das Propriedades do Sistema ou codifique o caminho no arquivo.bat.Scripts auxiliares:
update_github_ip.batestart_service.batdevem existir em seuPATHou em%USERPROFILE%\bin. Estes são os equivalentes CMD das funções shellupdate_github_ipestart_service.bashpara o script Kiwix: Se o WSL estiver instalado,bashestará disponível no CMD e o script.shserá executado diretamente. Caso contrário, adaptekiwix-docker-start-if-not-running.shpara um equivalente.bat.Tratamento de cotações: o CMD tem regras de cotação rígidas e frágeis. Se sua consulta contiver caracteres especiais (
&,|,>,<), coloque toda a consulta entre aspas duplas:s "sua & pergunta".limitação
set /p:set /psó lê a primeira linha de um arquivo. Para saída multilinha, usetypepara imprimir o arquivo diretamente (como feito na ramificação de tempo limite longo).
Características¶
Caminhos Dinâmicos: Resolve caminhos automaticamente através da variável de ambiente
SL5NET_AURA_PROJECT_ROOT.Reinicialização automática: Se o backend estiver inativo, chama
start_service.bate tenta iniciar os serviços locais da Wikipédia.Tempos limite inteligentes: primeiro tenta uma resposta rápida de 2 segundos e depois volta para um modo de processamento profundo de 70 segundos.