在windows中:双击运行Python程序、后台运行Python程序
安装Python解释器的windows环境,如果双击运行*.py的文件,会闪退。怎样避免闪退呢?
我们用python的日志输出程序来举例说明:
main.py中
import os
import logging
import time # 如果日志文件夹不存在,则创建
log_dir = "log" # 日志存放文件夹名称
log_path = os.getcwd() + os.sep + log_dir
if not os.path.isdir(log_path):
os.makedirs(log_path) # 设置logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
main_log_handler = logging.FileHandler(
log_dir + "/dd_%s.log" % time.strftime("%Y-%m-%d_%H-%M-%S", time.localtime(time.time())), mode="w+",
encoding="utf-8")
main_log_handler.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
main_log_handler.setFormatter(formatter)
logger.addHandler(main_log_handler) # 控制台打印输出日志
console = logging.StreamHandler() # 定义一个StreamHandler,将INFO级别或更高的日志信息打印到标准错误,并将其添加到当前的日志处理对象
console.setLevel(logging.INFO) # 设置要打印日志的等级,低于这一等级,不会打印
formatter = logging.Formatter("%(asctime)s - %(levelname)s: %(message)s")
console.setFormatter(formatter)
logging.getLogger('').addHandler(console) while True:
time_stamp = time.time()
# print("时间戳",time_stamp)
logger.info("时间戳 %s" % time_stamp) sec = 3
logger.info("睡眠 %s 秒" % sec)
time.sleep(sec)
一、双击运行python的具体实现
1、bat启动
start_show.bat 中(.bat文件 必须放在main.py的同一目录下)
python main.py
2、升级版:vbs后台运行(*面)
start_hidden.vbs 中(.vbs 文件必须放在main.py的同一目录下,且必须有 .bat 文件同在)
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c start_show.bat",0
二、windows中怎么快捷杀掉Python程序?
答:bat杀
stop_all_python.bat 中 (会杀死所有的Python程序)
taskkill /IM python.exe /F
三、其他说明:
1、带界面双击启动
双击start_show.bat
会出现cmd窗口,同时会产生日志文件夹
2、不带界面后台运行程序
双击start_hidden.vbs
进程会增加一个python.exe进程,增加的python.exe进程为后台启动的,可以通过日志查看
3、杀死所有Python.exe进程
双击stop_all_python.bat
所有的Python进程都消失了,第1部中产生的cmd窗口也消失了。
==========================我是一条优美的分割线==========================
扩展:答复网友MR_Mason
一、问题:
二、答复:
1、思路
windows下的:taskkill /IM python.exe /F 命令会将所有python解释器进程全部杀死。
windows下的:taskkill /pid 1235404 /f 命令会将进程编号为1235404的进程杀死。那么我们要做的就是找到main.py启动时的进程编号,然后在写入到名为stop_main.bat文件中,形如:
taskkill /pid 1235404 /f
del %0
注意:
pid后面的进程号是python程序随机生成的,所有获取pid进程号的时候也必须用python程序自动获取。
del %0 命令的作用是stop_main.bat文件运行结束后,删除stop_main.bat文件。目的是防止反复双击运行stop_main.bat文件,误删系统进程,导致系统崩溃。
2、实现
将main.py增加如下代码
# ========增加代码--开始========
def produce_stop_bat(pid, tmpfile="stop_xxx.bat"):
# 待写入内容
stop_cmd = 'taskkill /pid ' + str(pid) + ' /f' # 关闭指定进程
del_self_cmd = "del %0" # 删除自身文件
# 文件路径和名称
tmp_all = "stop_" + tmpfile + ".bat"
# 写入文件
with open(file=tmp_all, mode="w") as f:
f.write(stop_cmd + "\n" + del_self_cmd) # 进程号
pid = os.getpid()
# 本文件名(不含后缀.py)
myfilename = os.path.split(__file__)[-1].split(".")[0]
# 生成关闭进程的脚本文件
produce_stop_bat(pid, myfilename) # ========增加代码--结束========
增加代码后,完整的main.py
import os
import logging
import time # ========增加代码--开始========
def produce_stop_bat(pid, tmpfile="stop_xxx.bat"):
# 待写入内容
stop_cmd = 'taskkill /pid ' + str(pid) + ' /f' # 关闭指定进程
del_self_cmd = "del %0" # 删除自身文件
# 文件路径和名称
tmp_all = "stop_" + tmpfile + ".bat"
# 写入文件
with open(file=tmp_all, mode="w") as f:
f.write(stop_cmd + "\n" + del_self_cmd) # 进程号
pid = os.getpid()
# 本文件名(不含后缀.py)
myfilename = os.path.split(__file__)[-1].split(".")[0]
# 生成关闭进程的脚本文件
produce_stop_bat(pid, myfilename) # ========增加代码--结束======== # 如果日志文件夹不存在,则创建
log_dir = "log" # 日志存放文件夹名称
log_path = os.getcwd() + os.sep + log_dir
if not os.path.isdir(log_path):
os.makedirs(log_path) # 设置logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
main_log_handler = logging.FileHandler(
log_dir + "/dd_%s.log" % time.strftime("%Y-%m-%d_%H-%M-%S", time.localtime(time.time())), mode="w+",
encoding="utf-8")
main_log_handler.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
main_log_handler.setFormatter(formatter)
logger.addHandler(main_log_handler) # 控制台打印输出日志
console = logging.StreamHandler() # 定义一个StreamHandler,将INFO级别或更高的日志信息打印到标准错误,并将其添加到当前的日志处理对象
console.setLevel(logging.INFO) # 设置要打印日志的等级,低于这一等级,不会打印
formatter = logging.Formatter("%(asctime)s - %(levelname)s: %(message)s")
console.setFormatter(formatter)
logging.getLogger('').addHandler(console) while True:
time_stamp = time.time()
# print("时间戳",time_stamp)
logger.info("时间戳 %s" % time_stamp) sec = 3
logger.info("睡眠 %s 秒" % sec)
time.sleep(sec)
3、效果展示
(1)运行前
(2)双击start_show.bat(或者双击 start_hidden.vbs),运行后
(3)结束main进程
说明:进程查询的方式详见分割线之前部分。
如果有用,请给个赞呗!!!多谢。(^_^)
能力扩展:bat、dos控制多个后台程序启动
https://www.cnblogs.com/andy9468/p/12603877.html
在windows中:双击运行Python程序、后台运行Python程序的更多相关文章
-
iOS7程序后台运行
介绍 这次 iOS7 对程序后台运行进行了加强,但是仅仅是加强而已,要想像 Android 程序那样*当然就别想了,苹果这么做主要还是出于电池使用时间考虑,但是这次的加强对大部分程序基本够用. 在介 ...
-
Linux 程序后台运行
例子: * 程序后台运行: sslocal -c /etc/*-libev/config.json > /dev/>& & 参考: ...
-
SpringBoot程序后台运行
使用nohup命令让进程后台运行 nohup java -jar 自己的springboot项目.jar >日志文件名.log 2>&1 & >日志文件名.log : ...
-
python程序后台运行的实现
后台运行work()方法. work.py # -*- coding:utf-8 -*- def work(): print "running" import time time. ...
-
python脚本后台运行
问题描述: 环境: CentOS6.4 一个用python写的监控脚本test1.py,用while True方式一直运行,在ssh远程(使用putty终端)时通过以下命令启动脚本: python t ...
-
Linux中如何让命令在后台运行
1.在下达的命令后面加上&,就可以使该命令在后台进行工作,这样做最大的好处就是不怕被ctrl+c这个中断指令所中断. 2. 那大家可能又要问了,在后台执行的程序怎么使它恢复到前台来运行呢?很简 ...
-
Linux nohup 程序后台运行
&方式: Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行.比如我们要运行mysql在后台: /usr/local/my ...
-
ios程序后台运行设置(不是太懂)
文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间. 还有三种类型的可以运行在后以, 1.音乐 2.location 3.voip 文 ...
-
Linux --- 程序后台运行的几种方法
有时候我们运行一个程序,耗时比较长,所以在快下班的时候或是网络不稳定的时候就比较抓狂. 今天分享几个我在工作中用到的把程序放在后台运行的方法. nohup $ nohup --h Usage: noh ...
-
nohup保证程序后台运行
前言 我们运行某些命令的时候,它会默认在前台执行.如果要进行其他操作,则需要先停掉此程序.然后就蛋疼了. 解决 碰到这种情况,我们可以使用"nohup"命令和"&am ...
随机推荐
-
【转】Linux下apache/httpd服务启动与停止
apache服务,或者说httpd服务,如何启动,如何开机启动. 转来转去,找不到原文.. 操作系统环境:红帽5,具体如下:# uname -a Linux machine1 2.6.18-164.e ...
-
window.location和window.open
window.location和window.open的区别 window.location = "http://www.baidu.com" 跳转后有后退功能 window.lo ...
-
JAVA的文件创建
package com.xia; import java.io.*; public class test2 { public static void main(String[] args) { //输 ...
-
C#基础--属性 字段
访问修饰符: private: 私有成员,在类的内部才可以访问 protected: 受保护的成员,该类内部和继承类的内部可以访问 public: 公共成员, 完全公开, 没有访问限制 interna ...
-
java-StringBuffer学习笔记
字符串是敞亮,它们的值在创建之后不能更改字符串的内容一旦发生了变化,那么马上回创建一个新的对象 public class Demo1{ public static void main(String[] ...
-
CSS3中不常用但很有用的属性-1
内容来源于W3Cschool和<图解CSS3核心技术与案例实战> 1.:target选择器 URL 带有后面跟有锚名称 #,指向文档内某个具体的元素.这个被链接的元素就是目标元素(targ ...
-
Android-获取Html元素
第一步导包: implementation 'org.jsoup:jsoup:1.10.3' 第二步:需获取解析的Html: <p> <myfont style="colo ...
-
mysql 按照月份自动创建表,以年和月为表明,动态生成。
需求:mysql5.5 数据库,想要根据月份自动创建表,每个月创建一张表,需要数据库自动创建,并根据当前年和月动态生成表名称. 解决办法:1 连接数据库工具为Navicat 2 首先创建存储过程, ...
-
解题:SCOI 2011 糖果
题面 能把差分约束卡死的题,因为正解并不是差分约束,然而被我用一种奇怪的姿势过去了... 差分约束就是相等互相连零边,不超过/不低于从不多的一方向另一方连零边,超过/低于从少的一方向另一方连最小的边权 ...
-
几个用Python实现的简单算法
一.算法题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 程序源 ...