1
source
命令也称为“点命令”,实际上就是一个点符号(.),是 Bash 的内置命令。它的功能是使 Shell 读入指定的 Shell 程序文件并依次执行文件中的所有语句。通常,source
命令用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录²。
如果你在 Windows 环境下遇到了 source
命令无法识别的问题,那是因为 Windows 的命令提示符(cmd.exe)不支持 source
命令。在 Windows 中,你可以使用 .
来替代 source
命令,例如:
. filename
这将在当前 shell 中执行 filename
中的命令,不会启动新的子 shell。请注意,filename
是你要执行的脚本文件的名称。
2
当你需要在 Windows 服务器上部署 Flask 应用时,Waitress 是一个很好的选择。它是一个纯 Python 的 WSGI 服务器,易于配置,直接支持 Windows,而且不需要额外的依赖或编译¹。
- 使用
waitress-serve
命令来启动 Waitress 服务器。语法为{module}:{app}
,其中module
是应用模块的导入名,app
是应用程序的变量。- 如果你使用应用工厂模式,可以使用
--call {module}:{factory}
来代替。- 例如,如果你的 Flask 应用的入口是
hello.py
,并且应用变量名是app
,你可以运行以下命令:
waitress-serve --host 127.0.0.1 hello:app
- 这将在本地绑定到
127.0.0.1
的地址上运行 Waitress。
- 外部绑定:
- 不要以 root 身份运行 Waitress,因为这会导致应用以 root 身份运行,不安全。
- 如果你想在非特权端口上绑定所有外部 IP,可以不使用
--host
选项。- 但如果你使用反向代理(如 Nginx 或 Apache httpd),请避免使用
0.0.0.0
,而使用特定的 IP 地址。
3
`waitress-serve` 是一个命令行工具,用于启动 Waitress 服务器。它是 `waitress.serve` 函数的薄包装器,方便在开发和生产环境中使用。以下是关于 `waitress-serve` 的一些重要信息:
- **用法**:
- `waitress-serve [OPTS] MODULE:OBJECT`
- `MODULE:OBJECT` 指定应用程序,格式类似于 PasteDeploy。例如,`myapp.mymodule:wsgifunc`。
- 对于某些应用框架,如 web.py,可以使用点号解析属性,例如 `myapp.mymodule:appobj.wsgifunc`。
- 如果应用程序对象具有工厂方法,可以使用 `--call` 标志调用它,例如 `waitress-serve --call myapp.mymodule.app.wsgi_factory`。
- **常用选项**:
- `--host=ADDR`:指定监听的主机名或 IP 地址,默认为 `'0.0.0.0'`,表示监听所有 IP 地址。
- `--port=PORT`:指定监听的 TCP 端口,默认为 `'8080'`。
- `--listen=host:port`:告知 Waitress 在指定的 IP 地址和端口上监听。例如:`--listen=127.0.0.1:8080`。
- `--[no-]ipv4` 和 `--[no-]ipv6`:开启或关闭 IPv4 和 IPv6 支持。
- `--unix-socket=PATH`:指定 Unix 域套接字的路径(不适用于 Windows)。
- `--unix-socket-perms=PERMS`:设置 Unix 域套接字的权限,默认为 `'600'`。
4
waitress.serve
函数用于启动 Waitress 服务器,提供服务给传入的请求。让我为你介绍一下它的参数:
app
:这是你的 Flask 应用对象。将其作为参数传递给serve
函数。host
:指定监听的主机名或 IP 地址。默认为'0.0.0.0'
,表示监听所有 IP 地址¹。port
:指定监听的 TCP 端口,默认为8080
。例如,如果你的 Flask 应用的入口是
hello.py
,并且应用变量名是app
,你可以使用以下代码启动 Waitress 服务器:
from waitress import serve if __name__ == '__main__': serve(app, host='0.0.0.0', port=5000)
这将在所有网络接口上监听端口
5000
,并以非特权用户身份运行 Waitress。
5
Waitress
不应该以超级用户身份运行,因为这会导致应用程序代码以超级用户身份运行,这是不安全的。然而,不以超级用户身份运行意味着无法绑定到端口 80 或 443。解决之道是在Waitress
前面使用一个反向代理,例如nginx
或Apache httpd
。如果你想在非特权端口上绑定所有外部 IP,可以不使用--host
选项。但是,当使用反向代理时,请避免这样做,否则可能会绕过代理。0.0.0.0
不是一个有效的导航地址,你应该在浏览器中使用特定的 IP 地址。
6
http://localhost:5000/?key1=1&key2=2
return f"{request.args}"
return f"{request.args.get('key1')}"
ImmutableMultiDict([('key1', '1'), ('key2', '2')])
7
1
使用函数 而不是命令行语言
2
如果路径
先cd
然后使用命令行语言
8
- 程序运行速度过快:有时候,程序执行速度非常快,导致控制台窗口在你注意之前就已经打开并关闭了。你可以尝试以下方法:
- 在
return 0;
前面添加一行代码system("pause");
。这会暂停程序,直到你按下任意键。- 或者,对程序的属性进行设置,以便让控制台窗口保持打开状态。
- 缺少输出语句:即使代码逻辑正确,如果没有在需要显示结果的地方加入
printf
、cout
等输出语句,控制台也不会显示任何结果。请确保你的脚本中包含了输出语句。
9
- 创建一个 Waitress 服务器脚本: 创建一个 Python 脚本,例如
my_flask_app.py
,用于启动 Waitress 服务器并运行你的 Flask 应用。在脚本中,你需要导入你的 Flask 应用并使用waitress.serve
函数来启动服务器。示例代码如下:
from my_flask_app import app # 导入你的 Flask 应用 from waitress import serve if __name__ == "__main__": serve(app, host="0.0.0.0", port=5000)
- 设置开机自启动: 为了实现开机自启动,你可以创建一个 Windows 服务。以下是大致的步骤:
- 打开命令提示符(cmd)作为管理员。
- 使用以下命令创建一个新的 Windows 服务:
sc create MyFlaskApp binPath= "C:\path\to\python.exe C:\path\to\my_flask_app.py"
- 将
C:\path\to\python.exe
替换为你的 Python 解释器路径,C:\path\to\my_flask_app.py
替换为你的 Flask 应用脚本路径。- 启动服务:
sc start MyFlaskApp
- 检查日志: 如果你在控制台看不到 "Serving on http://0.0.0.0:5000",请确保你的 Flask 应用已经正确运行,并且没有其他错误。你可以查看 Waitress 的日志文件或者在脚本中添加日志记录来排查问题。
10
Waitress 是一个高性能的纯 Python 编写的独立 WSGI 服务器,适用于部署 Flask 等 Web 应用。它具备以下特点:
- 公平调度:Waitress 确保所有等待的服务请求都有机会被处理,而不仅仅是最早的请求。
- 可配置的限制:你可以设置最大并发请求数和最大内存使用量,以防止资源耗尽。
- 低延迟:通过优化内部数据结构和算法,Waitress 能在短时间内响应新请求¹。
关于性能参数的配置,你可以使用
waitress-serve
命令行方式来启动 Waitress 服务器。以下是一些常用的选项:
--threads=INT
:用于处理应用程序逻辑的线程数,默认为 4。--backlog=INT
:服务器的连接积压,默认值为 1024。--recv-bytes=INT
:调用时要请求的字节数socket.recv()
,默认值为 8192。--send-bytes=INT
:要发送到socket.send()
的字节数,避免部分填充 TCP 数据包,默认值为 1。--outbuf-overflow=INT
:如果挂起的输出大于此大小,将创建临时文件,默认值为 1048576(1MB)。--outbuf-high-watermark=INT
:当挂起的输出大于此值时,app_iter
将暂停,并在足够的数据写入套接字以使其降至此阈值以下时将恢复,默认值为 16777216(16MB)。
11
快捷方式 和 lnk 不一样
lnk 只能cmd输入名打开 不能start打开 也不能双击打开
快捷方式 不能cmd输入名直接打开 可以start命令打开 可以双击打开
都可以转到打开文件位置
似乎是快闪关了?
试试延迟
%cd% 在echo输出到控制台之前 在自动执行时 已经显示为实际路径了。
12
在命令提示符(CMD)中切换到根目录有几种方法。以下是其中一些选项:
- 直接切换到根目录: 输入以下命令并按回车键,即可将目录切换到根目录:
cd\
例如,如果你的命令提示符路径为 "C:\\Users\\Victo",执行上述命令后,目录将切换到 C 盘的根目录。
- 返回上一级目录: 如果你想返回到上一级目录,可以输入以下命令并按回车键:
cd..
或者:
cd ..
这两个命令都可以实现相同的效果。例如,如果你当前的命令提示符路径为 "C:\\Users\\Victo",执行上述命令后,目录将切换到 "C:\\Users"。
- 切换到其他驱动器: 如果你当前在一个驱动器中,想要切换到另一个驱动器,可以输入驱动器名称,后跟冒号和 /d 开关,然后按回车键。例如,要从 C 盘切换到 E 盘,执行以下命令:
e: /d
注意,驱动器名称不区分大小写,可以是小写或大写。
- 切换到指定路径: 如果你想切换到指定路径,可以使用以下命令:
- 切换到同一驱动器上的路径:
cd "C:\\ESD"
- 切换到不同驱动器上的路径:
cd "E:\\Archives" e:
以上命令将分别切换到指定的目录。
- 使用
CD
命令时,不带参数只键入CD
,会显示当前驱动器和目录。- 使用
/D
开关时,除了改变驱动器的当前目录外,还可以改变当前驱动器。如果命令扩展被启用,CHDIR
会将当前目录字符串转换成使用磁盘名上的大小写²³。
cd 还有很多花样细节 比如cd d: 会打印输出之前已经设定的d盘的目标位置 只待你转盘
但一般情况下不会打印输出
cd \ 给出当前盘符的根目录
与Linux不一样
当涉及到 Windows 命令行和 Linux shell 命令时,有一些功能命令在两者之间是相对应的。以下是一些常见的对应关系¹:
- 关机和重启:
- Windows:
shutdown
、reboot
、logout
、shutdown -s
、poweroff
- Linux:
shutdown
、reboot
、logout
、shutdown -r
、poweroff
- 显示用户名:
- Windows:
echo %USERNAME%
- Linux:
echo $USER
- 安装和卸载应用程序:
- Windows:无直接对应
- Linux:
sudo apt-get install {package}
、sudo apt-get remove {package}
- 压缩和解压缩文件夹:
- Windows:
zip
、unzip
- Linux:
zip
、unzip
- 连接到远程服务器:
- Windows:需要使用 PuTTY 客户端
- Linux:
ssh user@192.168.1.1 -p 33
- 列出已挂载的设备:
- Windows:
net use
- Linux:
findmnt -lo source,target,fstype,label,options -t ext4
- 执行脚本:
- Windows:
test.cmd
- Linux:
./test.sh
- 查看历史命令:
- Windows:F7
- Linux:
history
- 清屏:
- Windows:
cls
- Linux:
clear
- 退出命令行:
- Windows:
exit
- Linux:
exit
在 Windows 的命令提示符中,你可以使用 %userprofile%
来表示用户的主目录(也就是 home 目录)。具体操作如下:
- 打开命令提示符(按下
Win + R
,输入cmd
并按回车)。 - 输入以下命令,然后按回车:
cd /d %userprofile%
-
这将切换到你的主目录(通常是
C:\Users\<用户名>
)¹³。
关于脚本命名,你可以根据你的应用程序的实际用途来选择一个有意义的名称。例如,如果你的应用程序是一个博客网站,你可以将脚本命名为 `blog_server.py`。如果是一个任务管理应用,你可以命名为 `task_manager.py`。
要将你的 Flask 应用程序作为 Windows 服务开机启动,你可以使用 pywin32
模块来创建一个 Windows 服务。以下是一些步骤:
- 安装 pywin32:
首先,确保你已经安装了
pywin32
模块。如果没有,你可以使用以下命令安装:
pip install pywin32
- 编写服务脚本:
创建一个 Python 脚本,例如
my_flask_service.py
,并添加以下代码:
import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
import os
import sys
class MyFlaskService(win32serviceutil.ServiceFramework):
_svc_name_ = 'MyFlaskService'
_svc_display_name_ = 'My Flask Service'
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
socket.setdefaulttimeout(60)
self.is_alive = True
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
self.is_alive = False
def SvcDoRun(self):
import your_app # 导入你的 Flask 应用程序模块
app = your_app.app
serve(app, host='0.0.0.0', port=5000) # 启动 Waitress 服务器
if __name__ == '__main__':
if len(sys.argv) == 1:
servicemanager.Initialize()
servicemanager.PrepareToHostSingle(MyFlaskService)
servicemanager.StartServiceCtrlDispatcher()
else:
win32serviceutil.HandleCommandLine(MyFlaskService)
请确保替换 your_app
为你的应用程序模块。
- 安装服务: 打开命令提示符(以管理员身份运行),导航到脚本所在目录,并运行以下命令:
python my_flask_service.py install
这将安装服务并将其添加到 Windows 服务列表中。
- 启动服务: 在服务列表中找到你的服务(名称为 "My Flask Service"),右键单击并选择 "启动"。