在 Windows 上,PowerShell 并没有原生的 nohup 命令(这是 Linux 系统中的工具,用于让程序在后台运行并忽略挂断信号)。不过,通过 PowerShell 或命令提示符,你可以使用一些类似的方式来实现将 Python 程序挂在后台运行,达到类似 nohup 的效果。
以下是几种方法:
方法 1:使用 Start-Process 在后台运行
PowerShell 提供了 Start-Process 命令,可以用来启动一个新的进程,并让它在后台运行。
示例:
Start-Process -FilePath "python" -ArgumentList "your_script.py" -NoNewWindow -RedirectStandardOutput "output.log" -RedirectStandardError "error.log"
-
参数说明:
-
-FilePath "python":指定运行的程序,这里是 Python。 -
-ArgumentList "your_script.py":传递参数,这里是你的 Python 脚本路径。 -
-NoNewWindow:不打开新窗口(可选)。 -
-RedirectStandardOutput "output.log":将标准输出重定向到output.log。 -
-RedirectStandardError "error.log":将错误输出重定向到error.log。
-
特点:
- 运行后,程序会在后台执行,即使关闭 PowerShell 窗口,进程也会继续运行。
- 输出和错误日志会保存到指定的文件中。
方法 2:使用 start 命令(类似 Linux 的 nohup)
在 Windows 的命令提示符(或 PowerShell)中,可以使用 start 命令让程序以非阻塞的方式运行。
示例:
start /B python your_script.py > output.log 2>&1
-
参数说明:
-
/B:让程序在后台运行,不弹出新窗口。 -
> output.log:将标准输出重定向到output.log。 -
2>&1:将错误输出重定向到标准输出。
-
特点:
- 运行后,Python 程序会在后台执行。
- 输出和错误日志会保存到
output.log中。
方法 3:通过 Task Scheduler 启动 Python 程序
如果你需要在后台长期运行一个 Python 程序,可以利用 Windows 的任务计划程序来启动它。
步骤:
-
打开任务计划程序:
- 按
Win + R,输入taskschd.msc,回车。
- 按
-
创建新任务:
- 点击右侧的 创建任务。
- 在 常规 选项卡中:
- 设置任务名称(例如
MyPythonTask)。 - 选择 使用最高权限运行。
- 设置任务名称(例如
- 在 触发器 选项卡中:
- 点击 新建,选择 登录时 或 系统启动时。
- 在 操作 选项卡中:
- 点击 新建,选择 启动程序。
- 在 程序或脚本 中填写 Python 的路径(例如
C:\Python39\python.exe)。 - 在 添加参数 中填写脚本路径(例如
C:\path\to\your_script.py)。
- 保存任务。
-
启动任务:
- 在任务计划程序中右键点击任务,选择 运行。
特点:
- 即使你注销或断开远程桌面连接,任务也会继续运行。
- 适合需要长期运行的任务。
方法 4:使用 pythonw.exe(无窗口运行)
Python 自带一个 pythonw.exe 可执行文件,可以用来运行 Python 程序而不显示控制台窗口。
示例:
pythonw your_script.py
-
特点:
- 程序会在后台运行,不会弹出控制台窗口。
- 适合需要无干扰运行的任务。
注意:
- 如果你的脚本有输出(例如
print),由于没有控制台窗口,输出内容会丢失。 - 如果需要记录输出,可以在脚本中手动写入日志文件,或者结合
logging模块。
方法 5:结合 & 和 Start-Job(PowerShell 内置的后台任务管理)
PowerShell 提供了 Start-Job 命令,可以用来启动后台任务。
示例:
Start-Job -ScriptBlock { python "C:\path\to\your_script.py" }
-
特点:
- 使用
Start-Job启动的任务会在后台运行。 - 你可以通过以下命令查看任务状态:
Get-Job - 如果需要查看任务的输出,可以使用:
Receive-Job -Id <JobId> - 要终止任务,可以使用:
Stop-Job -Id <JobId>
- 使用
适用场景:
- 适合需要在 PowerShell 内部管理多个后台任务的情况。
方法 6:使用 nssm 将 Python 程序作为服务运行
如果你的 Python 程序需要长期运行,最可靠的方式是将其设置为 Windows 服务(类似 Linux 的守护进程)。
步骤:
-
下载
nssm: -
安装服务:
- 打开命令提示符(以管理员身份运行),进入
nssm所在目录。 - 运行以下命令:
nssm install MyPythonService - 在弹出的窗口中:
-
Path:填写 Python 的路径(例如
C:\Python39\python.exe)。 -
Arguments:填写你的脚本路径(例如
C:\path\to\your_script.py)。 - Startup directory:填写脚本所在的目录。
-
Path:填写 Python 的路径(例如
- 打开命令提示符(以管理员身份运行),进入
-
启动服务:
- 安装完成后,运行以下命令启动服务:
nssm start MyPythonService
- 安装完成后,运行以下命令启动服务:
-
服务管理:
- 要停止服务:
nssm stop MyPythonService - 要删除服务:
nssm remove MyPythonService
- 要停止服务:
特点:
- 程序会作为服务运行,即使服务器重启或用户注销,服务也会自动启动。
- 适合需要长期运行的任务。
总结
在 Windows 上实现类似 nohup 的方式运行 Python 程序,有以下几种选择:
-
短期任务:
- 使用
Start-Process或start /B命令。
- 使用
-
长期任务:
- 使用
Task Scheduler或将程序注册为服务(通过nssm)。
- 使用
-
无窗口运行:
- 使用
pythonw.exe。
- 使用
-
任务管理:
- 使用 PowerShell 的
Start-Job。
- 使用 PowerShell 的
根据你的需求选择合适的方法。如果你需要进一步的帮助或有具体的问题,请告诉我!










网友评论