
Ok, estou totalmente confuso sobre o que diabos está acontecendo no meu prompt de comando. Estou simplesmente tentando criar um script que minimize a janela de prompt, abra um endereço IP no navegador e execute um comando simples do servidor HTTP via Python.
Eu tenho que executar o comando do servidor HTTP APÓS o start
comando porque se eu executar o servidor HTTP primeiro, os próximos comandos NÃO EXECUTARÃO.
Eu até instalei alguns .exe
programas personalizados antigos que adicionavam pequenos recursos para consertar coisas como essa, mas nenhum deles funcionou corretamente...
EDITAR
Na verdade, descobri que era ""
isso que fazia com que o link não fosse aberto, mas ele carregava o site ANTES do servidor HTTP ser iniciado. Portanto, minha NOVA pergunta é: Como executo meu http.server
comando ANTES do start
comando sem que ele funcione (executar qualquer comando após um comando do servidor HTTP não funcionará, pois tudo depois dele nunca será executado).
EDITAR novamente
Obrigado mais uma vez Anaksunaman pela resposta, aqui está meu produto final para o comando: (RunHTTPServer.bat):
@echo Off
start "" /min python -m http.server 8000 -b 127.0.0.1
sleep 1
start http://127.0.0.1:8000/
Eu adicionei --bind para vinculá-lo a 127.0.0.1, pois às vezes ao usar http.server e tentar conectar-se a Localhost:8000, ele dirá que a conexão falhou...
então, OU remova -b/--bind e simplesmente escreva seu endereço PESSOAL nesse campo inicial.
Responder1
Você pode aproveitar o start
comando em ambas as chamadas. Por exemplo, usando um arquivo em lote no Windows:
@echo Off
@rem Start two separate processes via the Windows "start" command.
@rem The second command to open the browser will not be blocked.
@rem start the Python HTTP server with a minimized command window ("/min").
start "" /min python -m http.server 8000 --bind 127.0.0.1
@rem Give the HTTP server a second to start (optional).
sleep 1
@rem Open Firefox to the Python HTTP server instance.
start "" firefox http://localhost:8000
Ou você pode usar quase exatamente os mesmos comandos em Python com osubprocessomódulo:
#!/Programs/Python37/python
# Start two separate processes via the Windows "start" command.
# The second command to open the browser will not be blocked.
import sys
import subprocess
import time
# "/min" (below) minimizes the spawned command window (Windows).
try:
subprocess.run('cmd /c start "" /min python -m http.server 8000 --bind 127.0.0.1')
# subprocess.run('cmd /c start "" /min python http-server.py')
# Wait for our server to start (optional)
time.sleep(1)
# Open our browser
subprocess.run('cmd /c start firefox http://localhost:8000')
except Exception as err:
print('')
print(err)
sys.exit()
Por outro lado, como você apontou corretamente nos comentários abaixo, você pode omitir o nome do navegador (por exemplo, firefox
) em seu start
comando para simplesmente abrir o site no navegador padrão do Windows (ou seja, start "" http://localhost:8000
ou mesmo apenas start http://localhost:8000
).