Linux、Windows后台运行Python脚本
Linux:python或nohup命令
python命令:
python test.py &
python -u test.py >> test.log &
参数u,时时输出内容到文件。
python -u test.py >>test.log 2>&1 &
python -u test.py >>/dev/null 2>&1 &
1 表示正确输出的信息
2 表示错误输出的信息
2>&1 代表所有输出的信息
/dev/null 是linux下的一个设备文件,这个文件类似于一个垃圾桶,特点是:容量无限大
基本用法:
1.nohup python3 test.py &
后台使用Python3运行test.py文件,日志默认输出到当前目录nohup.out或~/nohup.out文件。
2.nohup python3 test.py >> nohup.out 2>&1 &
后台使用Python3运行test.py文件,日志全部输出到当前目录nohup.out文件。
3.查看所有Python3进程
ps -ef | grep python3
Linux系统后台运行操作步骤如下:
1.第一种方法是直接用unhup命令来让程序在后台运行,命令格式如下:
unhup python 文件名.py (> ***.log )&
在这个命令中,python指定我们要执行的文件为python文件,后面的文件名.py即是我们要执行的文件。括号内容表示可以将平时输出到控制台中的内容重定向到*.log这个文件中,这个是可选的,如果没有这个,则会默认输出到nohup.out文件中。括号后面你的&表示后台运行。
2.第二种方法是写一个脚本,然后把脚本提交给服务器,让服务器在后台运行脚本里面的语句。假设我们定义了一个脚本start.sh,其内容如下:
#!/bin/bash
cd 想要运行文件的路径名
python -u ***.py
上述脚本中,#!/bin/bash是指此脚本使用/bin/bash来解释执行下面的语句,其中cd是表示将当前目录跳到所要运行文件所在目录,然后python -u ***.py则表示运行***python文件,当写完该脚本后,我们就可以使用下面的这条命令来执行该脚本从而让程序在后台运行:
./start.sh > result.log &
在这里./start.sh表示运行当前目录下的脚本start.sh,> result.log表示把原来输出到控制台的东西都输出到result.log文件中,&表示在后台运行
我们通过ps -e命令可以查看后台运行的进程都有哪些
Windows:pythonnw命令
python安装目录中,大家会发现目录中有python.exe和pythonw.exe两个可执行文件。
python.exe在运行程序的时候,会弹出一个黑色的控制台窗口(也叫命令行窗口、DOS/CMD窗口)
pythonw.exe是无窗口的Python可执行程序,意思是在运行程序的时候,没有窗口,代码在后台执行
方式一:会弹出一个黑色的控制台窗口,并可以实时查看输出日志
方式二:没有窗口,代码在后台执行
1.pythonw app.py
后台使用Python运行test.py文件,无日志输出。
2.pythonw app.py > python.log
后台使用Python运行app.py文件,日志输出到当前目录python.log文件。
3.查看windows下所有进程:tasklist
4.指定进程号或名称杀死进程:taskkill /f /t /pid 进程号
注意:
由上图可以看到pythonw程序对应的有四个不同的pid号,很难确定要杀掉哪个pid,如果后台用pythonw指令启动的程序多的时候,这样区分难度就加大了
为了解决这一问题,最好是创建bat脚本执行。
操作步骤如下
启动程序脚本:在venv同目录位置新建start.bat脚本
@echo off call venv\Scripts\activate.bat pythonw app.py >python.log exit
关闭程序脚本:在venv同目录的位置新建shutdown.bat脚本(CommandLine like '%%pythonw app.py%%必须与start.bat中启动的指令一致)
@echo off wmic process where "CommandLine like '%%pythonw app.py%%' and name='pythonw.exe'" get processid,commandline >pid.txt for /f "tokens=2 delims===" %%i in ('type pid.txt^| findstr "ProcessId="') do (taskkill /f /t /pid %%i) pause
相关资源:
http://www.dcsdn.com/doc/do-3728
http://www.dcsdn.com/doc/do-3662
http://www.dcsdn.com/doc/d-3573
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix