
Okay, ich bin also völlig verwirrt darüber, was zum Teufel in meiner Eingabeaufforderung vor sich geht. Ich versuche einfach, ein Skript zu erstellen, das das Eingabeaufforderungsfenster minimiert, eine IP-Adresse im Browser öffnet und dann einen einfachen HTTP-Serverbefehl über Python ausführt.
Ich muss den HTTP-Serverbefehl NACH dem start
Befehl ausführen, denn wenn ich zuerst den HTTP-Server ausführe, werden die nächsten Befehle NICHT AUSGEFÜHRT.
Ich habe sogar versucht, einige alte benutzerdefinierte .exe
Programme zu installieren, die kleine Funktionen hinzugefügt haben, um solche Dinge zu beheben, aber keines davon hat richtig funktioniert ...
BEARBEITEN
Ich habe tatsächlich herausgefunden, ""
dass es daran lag, dass der Link nicht geöffnet wurde, aber die Site wird geladen, BEVOR der HTTP-Server startet. Meine NEUE Frage lautet also: Wie führe ich meinen http.server
Befehl VOR dem start
Befehl aus, ohne dass er nicht funktioniert (das Ausführen eines Befehls nach einem HTTP-Serverbefehl funktioniert nicht, da alles, was danach kommt, nie ausgeführt wird.)
Nochmal BEARBEITEN
Nochmals vielen Dank, Anaksunaman, für die Antwort. Hier ist mein Endprodukt für den Befehl: (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/
Ich habe --bind hinzugefügt, um es an 127.0.0.1 zu binden, da manchmal bei Verwendung von http.server und Verbindungsversuchen mit Localhost:8000 die Meldung „Verbindung fehlgeschlagen“ angezeigt wird ...
ODER entfernen Sie -b/--bind und schreiben Sie einfach Ihre PERSÖNLICHE Adresse in dieses Startfeld.
Antwort1
Sie können den Befehl in beiden Aufrufen nutzen start
. Beispielsweise mithilfe einer Batchdatei in 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
Oder Sie können fast genau die gleichen Befehle in Python verwenden mit demUnterprozessModul:
#!/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()
Nebenbei bemerkt können Sie, wie Sie in den Kommentaren unten richtig anmerken, den Browsernamen (z. B. firefox
) in Ihrem start
Befehl weglassen, um die Website einfach im Standardbrowser für Windows (also start "" http://localhost:8000
oder sogar nur start http://localhost:8000
) zu öffnen.