本文主要讲述如何使用Python在指定的秒数后关闭Windows上运行的程序(此程序以网易云音乐为例)。本文的背景是昨晚发现网易云音乐的PC客户端没有定时关闭的功能,可以使用Python编写一个简单的脚本,用于定时关闭这样的计划任务。经过改良后,可以对此做一些有用的扩展,用于日常运维中。

为什么使用Python来做这件事?

用cmd、计划任务或者批处理做这件事不可以吗?如果说忽略过程,只看结果的话,这些方式确实可能更简单也能达到目的,但是通过Python来做可以从过程和结果两个方面获得很多好处:

可以拿来练手,熟能生巧,而且很多东西不用就忘记

控制程序的行为上更加灵活,想输出什么就输出什么,想扩展功能可以扩展功能,如写入日志等

移植性和复用性比较好,还可以用到Linux和Mac OSX

脚本运行原理:

1.使用python内置模块sched实现计划任务

2.使用psutil模块实现枚举和kill进程

3.使用thread模块并行执行两个阻塞任务

此脚本涉及的知识:

获取系统语言默认编码

枚举和kill 进程

获取当前用户的用户名

实现倒计时功能

实现计划任务功能

Python多线程执行

运行环境与使用方法:

Python 2.7

psutil

使用python直接运行此脚本即可

其中,在脚本的__main__中可以修改时间(多少秒后执行)和进程的名字

运行结果截图:

这是设置的10s后关闭网易云音乐的运行截图

说明:

第一行显示当前运行时的时间;

第二行会实时显示当前时间和剩余的小时、分钟和秒数;

第3、4、5、6行表示查到到进程并杀死进程;

最后两行打印结束时的时间和退出信息;

脚本内容:

脚本可以从GitHub上的LinuxBashShellScriptForOps项目中获取,并获得更新和错误修正版本。

https://github.com/DingGuodong/LinuxBashShellScriptForOps/blob/master/projects/WindowsSystemOps/System/pyScheduleTask.py

脚本内容如下:

#!/usr/bin/python

# encoding: utf-8

# -*- coding: utf8 -*-

"""

Created by PyCharm.

File:               LinuxBashShellScriptForOps:pyScheduleTask.py

User:               Guodong

Create Date:        2017/4/6

Create Time:        22:33

"""

# https://docs.python.org/2/library/sched.html

import threading

import sched

import time

import sys

import locale

import codecs

def get_system_encoding():

"""

The encoding of the default system locale but falls back to the given

fallback encoding if the encoding is unsupported by python or could

not be determined.  See tickets #10335 and #5846

"""

try:

encoding = locale.getdefaultlocale()[1] or 'ascii'

codecs.lookup(encoding)

except LookupError:

encoding = 'ascii'

return encoding

DEFAULT_LOCALE_ENCODING = get_system_encoding()

def shutdown_NetEaseCloudMusic(name):

# define NetEaseCloudMusic process name

ProcessNameToKill = name

print

import psutil

import sys

# learn from getpass.getuser()

def getuser():

"""Get the username from the environment or password database.

First try various environment variables, then the password

database.  This works on Windows as long as USERNAME is set.

"""

import os

for username in ('LOGNAME', 'USER', 'LNAME', 'USERNAME'):

user = os.environ.get(username)

if user:

return user

currentUserName = getuser()

if ProcessNameToKill in [x.name() for x in psutil.process_iter()]:

print "[I] Process \"%s\" is found!" % ProcessNameToKill

else:

print "[E] Process \"%s\" is NOT running!" % ProcessNameToKill

sys.exit(1)

for process in psutil.process_iter():

if process.name() == ProcessNameToKill:

try:

# root user can only kill its process, but can NOT kill other users process

if process.username().endswith(currentUserName):

process.kill()

print "[I] Process \"%s(pid=%s)\" is killed successfully!" % (process.name(), process.pid)

except Exception as e:

print e

def display_countdown(sec):

def countdown(secs):

"""

blocking process 1

:param secs: seconds, int

:return:

"""

current_time = time.strftime("%Y-%m-%d %H:%M:%S %Z").decode(DEFAULT_LOCALE_ENCODING).encode("utf-8")

print "Time current: %s" % current_time

while secs:

now = time.strftime("%Y-%m-%d %H:%M:%S %Z").decode(DEFAULT_LOCALE_ENCODING).encode("utf-8")

hours, seconds = divmod(secs, 3600)

minutes, seconds = divmod(seconds, 60)

clock_format = '{:02d}:{:02d}:{:02d}'.format(hours, minutes, seconds)

sys.stdout.write('\rTime now: %s Time left: %s' % (now, clock_format))

sys.stdout.flush()

time.sleep(1)

secs -= 1

# set a human readable timer here, such as display how much time left to shutdown

countdown(int(sec))

def display_scheduler(name):

"""

blocking process 2

:return:

"""

s = sched.scheduler(time.time, time.sleep)

s.enter(10, 1, shutdown_NetEaseCloudMusic, (name,))

s.run()

now = time.strftime("%Y-%m-%d %H:%M:%S %Z").decode(DEFAULT_LOCALE_ENCODING).encode("utf-8")

print "Time finished: %s\nGood bye!" % now

if __name__ == '__main__':

seconds_to_shutdown = 10

process_name_to_shutdown = "cloudmusic.exe"

threadingPool = list()

threading_1 = threading.Thread(target=display_countdown, args=(seconds_to_shutdown,))

threading_2 = threading.Thread(target=display_scheduler, args=(process_name_to_shutdown,))

threadingPool.append(threading_1)

threadingPool.append(threading_2)

for thread in threadingPool:

thread.setDaemon(False)

thread.start()

thread.join()

tag: python计划任务,python定时任务,python sched

--end--

python刷网易云_Python脚本用于定时关闭网易云音乐PC客户端相关推荐

  1. pycharm定时运行python脚本_Python脚本用于定时关闭网易云音乐PC客户端

    本文主要讲述如何使用Python在指定的秒数后关闭Windows上运行的程序(此程序以网易云音乐为例).本文的背景是昨晚发现网易云音乐的PC客户端没有定时关闭的功能,可以使用Python编写一个简单的 ...

  2. python 定时运行 定时关闭_Python脚本用于定时关闭网易云音乐PC客户端

    本文主要讲述如何使用Python在指定的秒数后关闭Windows上运行的程序(此程序以网易云音乐为例).本文的背景是昨晚发现网易云音乐的PC客户端没有定时关闭的功能,可以使用Python编写一个简单的 ...

  3. windows 定时任务:schtasks,定时关闭网易云音乐

    大部分属于转载和粘贴. 使用命令:schtasks windows 定时任务 使用样例: 每天定时关闭网易云音乐: 每天22:20关闭网易云音乐: schtasks /create /tn " ...

  4. 网易云音乐PC客户端加密API逆向解析

    1.前言 网上已经有大量的web端接口解析的方法了,但是对客户端的接口解析基本上找不到什么资料,本文主要分析网易云音乐PC客户端的API接口交互方式. 通过内部的代理设置,使用fiddler作为代理工 ...

  5. 用 Python + itchat 写一个爬虫脚本每天定时给女朋友发微信暖心话

    项目介绍: 灵感来源 在掘金看到了一篇<用Node+wechaty写一个爬虫脚本每天定时给女(男)朋友发微信暖心话>后,我就想为什么不用 Python 去实现这个功能呢. JUST TO ...

  6. 如何才能学好python编程零基础_Python脚本该怎么学,零基础也可以学好Python编程吗?...

    这波太炸了!Python脚本可视化居然可以这么玩! 如同艺术家们用绘画让人们更贴切的感知世界,数据可视化也能让人们更直观的传递数据所要表达的信息.你知道Python脚本可视化有多好看么?就像下图这样, ...

  7. python制作软件界面_Python 脚本 GUI 界面生成工具

    前言 对于一些 Python 脚本,我们想把它打包给其他人使用,不是黑色的命令行框,而是打包成一个有界面的程序包给别人,让普通用户也能用上是多么酷的事啊. 涉及到界面,就少不了 GUI 编程,对于一些 ...

  8. python处理fasta文件_Python脚本:fasta文件单序列信息提取

    使用Python对fasta格式的序列进行基本信息统计 预期设计输出文件中包括fasta文件名,序列长度,GC含量以及ATCG各自的含量. Python脚本编辑 使用的文件 test.fasta st ...

  9. python手机屏幕控制_Python脚本利用adb进行手机控制的方法

    一.  adb 相关命令: 1. 关闭adb服务:adb kill-server 2. 启动adb服务  adb start-server 3. 查询当前运行的所有设备  adb devices 4. ...

最新文章

  1. 女神青涩时纤毫毕现!腾讯AI模型GFPGAN火上GitHub热榜第一,Demo在线可玩
  2. centos 7 yum 安装 MongoDB 4.2
  3. HTML rel 属性
  4. 图谱问答-句子向量模型部署项目总结(未完)
  5. tiger4444/rabbit4444后缀勒索病毒怎么删除 能否百分百恢复
  6. vue ---- webpack -插件 html-webpack-plugin
  7. Py之pyaudio:Python库之pyaudio简介、安装、使用方法之详细攻略
  8. Linux查看系统自启动服务
  9. java学籍管理系统部分代码_java学籍管理系统源代码
  10. 猿创征文|Python学习工具千千万,我心中的TOP10
  11. 教程(二)安装Java JDK
  12. 知乎上那些简短却非常深刻的回答
  13. 解决从GitHub拉取、提交代码一直验证失败的问题
  14. HDU5015 233 Matrix
  15. 编程范式(斯坦福大学)学习笔记《四》
  16. dedecms自定义表单 发送邮件
  17. 电信大型服务器机房_国内联通、电信、移动IDC机房名录
  18. 【Simulink教程案例17】基于simulink的伪码序列相关峰检测仿真——将matlab数据导入到Simulink中作为信号源
  19. 大连理工大学计算机考研专业目录,2017年大连理工大学考研专业目录
  20. 微信域名拦截(微信内打不开网址)解决方法

热门文章

  1. Jenkins镜像加速(清华大学镜像)
  2. 黑产反诈有方法,异常识别我在行—欺诈反洗钱等领域用得最多的经典算法
  3. 一键获取网页中的全部图片并批量下载(国内淘宝天猫京东网站+国外商品页面)——亲测有效
  4. ms project
  5. 浅谈/proc/net/dev的由来
  6. 最早采用二进制的计算机,计算机 | 中国古代人最早提出的二进制思想?
  7. 软件系统开发费用的估算——功能点方法 应用实例
  8. 暨南大学21考研计算机上岸吐槽贴经验贴流水账
  9. 深入理解Linux 条件变量2:使用条件变量实现[生产-消费]框架
  10. 新手小白纠结要做角色建模还是场景建模比较好?