Windows系统搭建好Python的环境后,进入Python的安装目录,大家会发现目录中有python.exe和pythonw.exe两个程序。如下图所示:
它们到底有什么区别和联系呢?
概括说明一下:
python.exe在运行程序的时候,会弹出一个黑色的控制台窗口(也叫命令行窗口、DOS/CMD窗口);
pythonw.exe是无窗口的Python可执行程序,意思是在运行程序的时候,没有窗口,代码在后台执行。
.py和.pyw文件的区别也来源于python.exe和pythonw.exe的区别:
安装视窗版 Python 时,扩展名为 .py 的文件被默认为用 python.exe 运行的文件,而 .pyw文件则被默认为用 pythonw.exe 运行
了解到python.exe和pythonw.exe的区别后,然后在根据自己的需要可以直接进行后台执行:
windows系统
方式一:会弹出一个黑色的控制台窗口
方式二:没有窗口,代码在后台执行
首先激活虚拟环境 直接执行pythonw app.py > python.log
通过tasklist指令可以看到pythonw指令已经后台启动程序,如果想终止该后台启动的程序可以使用指令 taskkill /f /t /pid 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
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命令可以查看后台运行的进程都有哪些
标签:脚本,exe,python,执行程序,后台,py,pythonw From: https://www.cnblogs.com/hhaostudy/p/17453390.html