好吧,我完全搞不懂命令提示符中到底发生了什么。我只是想编写一个脚本,该脚本将最小化提示窗口,在浏览器中打开 IP 地址,然后通过 Python 运行一个简单的 HTTP 服务器命令。
我必须在命令之后运行 HTTP 服务器命令,start
因为如果我先运行 HTTP 服务器,那么下一个命令就不会运行。
我甚至安装了一些旧的自定义.exe
程序,添加了一些小功能来解决此类问题,但它们都无法正常工作......
编辑
我实际上已经弄清楚了是""
什么导致它无法打开链接,但它在 HTTP 服务器启动之前加载了网站。所以我的新问题是:如何http.server
在命令之前运行我的命令start
而不使它不起作用(在 HTTP 服务器命令之后运行任何命令都不会起作用,因为它之后的所有内容都不会执行。)
再次编辑
再次感谢 Anaksunaman 的回答,这是我的命令的最终产品:(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/
我添加了 --bind 将其绑定到 127.0.0.1,因为有时使用 http.server 并尝试连接到 Localhost:8000 时,它会说连接失败...
因此,或者删除 -b/--bind 并在开始字段中写入您的个人地址。
答案1
您可以start
在两个调用中都利用该命令。例如,在 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
或者,你也可以使用几乎完全相同的 Python 命令子进程模块:
#!/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()
顺便说一句,正如您在下面的评论中正确指出的那样,您可以firefox
在命令中省略浏览器名称(例如)start
,只需在 Windows 的默认浏览器中打开网站(即start "" http://localhost:8000
甚至只是start http://localhost:8000
)。