首页 > 编程语言 >python后台执行程序

python后台执行程序

时间:2023-06-03 16:01:45浏览次数:47  
标签:脚本 exe python 执行程序 后台 py pythonw

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

相关文章

  • 用Python开发输入法后台(10)——删除已有词
    有些已经组好的词,可能是不小心组错了,需要删除它,我的输入法暂时还不支持,现在来实现它.用户场景用户正常选词,如下所示:然后按Del键,进入删除模式最后按F1~F9键,删除指定的词......
  • 6-3|Python更新已有的记录
    >>>user.save() #save()returnsthenumberofrowsmodified.>>>user.id>>>user.save()>>>user.id>>>huey.save()>>>huey.id如果你更新多个记录,使用UPDATE插询。下列例子将更新Tweet多个满足如果是昨天之前发表的实例,将它们标示为已发表,Model.upda......
  • Python 读取CSV
    importcsvdefparseCSVFileStr(data):"""将csv转换为[{},{},{},{},{},{},]形式的列表"""titleFlag=0ldata=[]ltitle=[]data=data.replace('"','')forrowindata.spli......
  • 补货站后台管理系统使用说明
    项目背景:当今出行方案中,乘坐出租车以及网约车已成为一种主流,尤其是网约车,近几年随着规范化的网约车制度建立,网约车已成为正式的职业,按照最新的出行数据统计我国共有17家网约车平台订单量在30万单以上,这些出行订单均代表着一位乘车出行的乘客。这种出行方式,方便快捷,有很高的可定制......
  • 2023-06-03 初试python爬取文章
    注意:本实验是在windows系统下操作。首先配置python环境以及安装一些必要的库:安装python请前往python官网下载,仙人指路......
  • Python time 模块
    常用#float整数位为秒time.time()#struct_timetime.localtime()#stringtime.ctime()#stringtime.asctime()转换#struct_timetime.localtime(float)#floattime.mktime(struct_time)#struct_timetime.strptime(string,"%Y-%m-%d%H:%M:%S")#......
  • Python asyncio之协程学习总结
    实践环境Python3.6.2什么是协程协程(Coroutine)一种电脑程序组件,该程序组件通过允许暂停和恢复任务,为非抢占式多任务生成子程序。协程也可以简单理解为协作的程序,通过协同多任务处理实现并发的函数的变种(一种可以支持中断的函数)。下面,我们通过日常生活场景为例,对什么是协程进行说......
  • Python 标准类库-因特网数据处理之Base64数据编码
    该模块提供将二进制数据编码为可打印ASCII字符并将这种编码解码回二进制数据的功能。它为RFC3548中指定的编码提供编码和解码功能。定义了Base16、Base32和Base64算法,以及事实上的标准Ascii85和Base85编码。RFC3548编码适用于对二进制数据进行编码,以便可以安全地通过电子邮件发......
  • Python 函数
    函数返回多个返回值defmultiple_return_value():importdatetimed=datetime.date.today()val_1='年份为:{}'.format(d.year)val_2='月份为:{}'.format(d.month)returnval_1,val_2#只需在return关键字后跟多个值(依次用逗号分隔)val=multip......
  • 【python】类变量和成员变量
    类变量定义在类里面定义,且不位于构造或者成员函数里面,同时没有"self."的前缀;或者在类外定义,用 类名.类变量名 来新增加类变量。使用两种使用方法:(1)类名.类变量名(如下的Test.a)(2)类的实例对象.类变量名(如下的T.a)exp:classTest: a=1 ###类变量 def__i......