Answers:
您已经有一个绑定到默认端口(8000)的进程。如果您之前已经运行过相同的模块,则很可能该进程仍绑定到端口。首先尝试找到其他过程:
$ ps -fA | grep python
501 81651 12648 0 9:53PM ttys000 0:00.16 python -m SimpleHTTPServer
包含命令参数,因此,SimpleHTTPServer
如果有多个python
进程处于活动状态,则可以发现其中一个正在运行。您可能想测试是否http://localhost:8000/
仍然显示本地文件的目录列表。
第二个数字是进程号;通过发送信号来停止服务器:
kill 81651
这发送一个标准SIGTERM
信号;如果该过程没有响应,则您可能不得不采用更严格的方法,例如发送SIGKILL
(kill -s KILL <pid>
或kill -9 <pid>
)信号。有关更多详细信息,请参见Wikipedia。
可替代地,一个上运行服务器不同端口,通过指定在命令行上的备用端口:
$ python -m SimpleHTTPServer 8910
Serving HTTP on 0.0.0.0 port 8910 ...
然后以方式访问服务器http://localhost:8910
; 如果8910
尚未使用该端口,则可以是1024或更高版本中的任何数字。
sudo kill -9 PID
kill
向进程发送信号,它可以决定处理(例如正常关闭或旋转日志文件)。这些信号是整数(每个都有一个名称),默认值为15,表示TERM
或终止。使用-9发送信号9,KILL
进程无法捕获并忽略该信号,无论操作系统是否愿意,操作系统都会终止该进程。
简单的解决方案:
使用port查找过程8080
:
sudo lsof -i:8080
杀死它:
kill XXXX
lsof
输出的外观以及如何在输出中查找进程ID(列出的“ XXXX”)的示例中受益。对于没有此信息的任何人,这是输出中第二个字段,标题标签为“ PID”。
您也可以在第二高的可用端口上服务,在Python中执行以下操作:
import SimpleHTTPServer
import SocketServer
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
port = 8000
while True:
try:
httpd = SocketServer.TCPServer(('', port), Handler)
print 'Serving on port', port
httpd.serve_forever()
except SocketServer.socket.error as exc:
if exc.args[0] != 48:
raise
print 'Port', port, 'already in use'
port += 1
else:
break
如果您需要对其他实用程序执行相同的操作,则作为bash脚本可能会更方便:
#!/usr/bin/env bash
MIN_PORT=${1:-1025}
MAX_PORT=${2:-65535}
(netstat -atn | awk '{printf "%s\n%s\n", $4, $4}' | grep -oE '[0-9]*$'; seq "$MIN_PORT" "$MAX_PORT") | sort -R | head -n 1
将该名称设置为可执行文件,get-free-port
您可以执行以下操作:
someprogram --port=$(get-free-port)
这不如原生Python方法可靠,因为bash脚本无法捕获端口-另一个进程可以在进程捕获端口之前捕获端口(竞赛条件)-但在使用不支持该功能的实用程序时仍然足够有用没有自己尝试的方法。
我有一个树莓派,并且正在使用python网络服务器(使用Flask)。我已经尝试了以上所有内容,唯一的解决方案是关闭terminal(shell),然后再次打开它。或重新启动树莓派,因为没有什么可以阻止该网络服务器...
您可以使用允许服务器重用地址allow_reuse_address
。
服务器是否允许重用地址。默认值为
False
,可以在子类中设置以更改策略。
import SimpleHTTPServer, SocketServer
PORT = 8000
httpd = SocketServer.TCPServer(("", PORT), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.allow_reuse_address = True
print "Serving at port", PORT
httpd.serve_forever()
python -m SimpleHTTPServer 8081