我厌倦了输入manage.py startserver 10.211.55.4:4000
,所以决定为此创建一个别名。唯一的问题是:端口有时会改变。所以我在 bash 配置文件中执行了此操作:
function runserver() {
python manage.py runserver 10.211.55.4:$1
}
但是当我调用它:时runserver 3000
,它会启动它,但立即停止说:
“错误:无法分配该 IP 地址”。但是,如果我在命令行中直接输入相同的内容,它就会正常工作,没有任何问题。
答案1
按照您最初的尝试,您可以调整该功能如下:
function runserver() {
python manage.py runserver 10.211.55.4:$PORT
}
然后像这样调用它:
PORT=3000 runserver
答案2
这实际上是当您向 Python/Django 提供一个它无法绑定的 IP 地址(不属于系统的 IP 地址)时从 Python/Django 返回的错误,如下面的真实、刚刚运行的示例所示:
$ python manage.py runserver 123.123.123.123:8000
Validating models...
0 errors found
June 03, 2014 - 22:36:58
Django version 1.5.7, using settings 'tv.settings'
Development server is running at http://123.123.123.123:8000/
Quit the server with CONTROL-C.
Error: That IP address can't be assigned-to.
因此,您要么需要修复您的 IP 地址(查看输出以ifconfig --all
了解可用的 IP 地址),要么只需使用以下命令绑定到所有 IP 地址:
function runserver() {
python manage.py runserver 0:$1
}
事情的 bash 方面是合理的。
答案3
你做得对。
我怀疑您在测试中遇到了网络问题,失败的测试使用该功能纯属巧合。当您关闭 TCP 连接时,端口会继续使用一小段时间(30 秒),以防有未收到的待处理数据包(数据包可能无序到达)。这是TIME_WAIT
状态。为了允许新服务器立即重启,设置SO_REUSEADDR
标志(setsockopt
Python 中有一个例子socket
请参阅文档。
答案4
我们可以使用组命令{ list; }
和此处字符串<<<
重定向来创建别名。主要目的是重定向stdin
到命令。下面介绍了几种方法
alias runserver='{ xargs -I % python manage.py runserver 10.211.55.4:%;} <<<'
alias runserver='{ IFS= read -r port; python manage.py runserver 10.211.55.4:"$port";} <<<'
alias runserver='{ port=$(line); echo python manage.py runserver 10.211.55.4:"$port";} <<<'
请注意,后面需要有空格{
,前面需要有分号。}