Python脚本用于定时关闭网易云音乐PC客户端

简介:

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

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

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

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

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

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

脚本运行原理:

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

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

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

此脚本涉及的知识:

  1. 获取系统语言默认编码

  2. 枚举和kill 进程

  3. 获取当前用户的用户名

  4. 实现倒计时功能

  5. 实现计划任务功能

  6. Python多线程执行

运行环境与使用方法:

  1. Python 2.7

  2. psutil

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

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

运行结果截图:

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

wKiom1jnLsPB27zQAAJY8Y_udxY871.jpg

说明:

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

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

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

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

脚本内容:

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

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

脚本内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/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  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:
     """
     =  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--




本文转自 urey_pp 51CTO博客,原文链接:http://blog.51cto.com/dgd2010/1913818,如需转载请自行联系原作者



相关文章
|
16天前
|
存储 Shell 区块链
怎么把Python脚本打包成可执行程序?
该文档介绍了如何将Python脚本及其运行环境打包成EXE可执行文件,以便在不具备Python环境的计算机上运行。首先确保Python脚本能够正常运行,然后通过安装PyInstaller并使用`--onefile`参数将脚本打包成独立的EXE文件。此外,还提供了去除命令行窗口和指定可执行文件图标的详细方法。这些步骤帮助用户轻松地将Python程序分发给最终用户。
怎么把Python脚本打包成可执行程序?
|
1天前
|
运维 Prometheus 监控
自动化运维的魔法:使用Python脚本简化日常任务
【8月更文挑战第50天】在数字化时代的浪潮中,自动化运维成为提升效率、减少人为错误的利器。本文将通过一个实际案例,展示如何利用Python脚本实现自动化部署和监控,从而让运维工作变得更加轻松和高效。我们将一起探索代码的力量,解锁自动化运维的神秘面纱,让你的工作环境焕然一新。
116 81
|
4天前
|
存储 程序员 开发者
Python 编程入门:从零基础到编写实用脚本
【9月更文挑战第15天】本文是一篇面向初学者的Python编程入门指南,通过浅显易懂的语言和实际的代码示例,引导读者逐步掌握Python的基本概念、语法规则以及如何运用Python解决实际问题。文章不仅介绍了Python的基础知识点,还通过实例演示了如何将这些知识应用于日常编程任务中,帮助读者快速上手并能够独立编写简单的Python脚本。
|
4天前
|
监控 Ubuntu API
Python脚本监控Ubuntu系统进程内存的实现方式
通过这种方法,我们可以很容易地监控Ubuntu系统中进程的内存使用情况,对于性能分析和资源管理具有很大的帮助。这只是 `psutil`库功能的冰山一角,`psutil`还能够提供更多关于系统和进程的详细信息,强烈推荐进一步探索这个强大的库。
16 1
|
10天前
|
安全 JavaScript 前端开发
自动化测试的魔法:如何用Python编写你的第一个测试脚本
【8月更文挑战第41天】在软件的世界里,质量是王道。而自动化测试,就像是维护这个王国的骑士,确保我们的软件产品坚不可摧。本文将引导你进入自动化测试的奇妙世界,教你如何使用Python这把强大的魔法杖,编写出能够守护你代码安全的第一道防护咒语。让我们一起开启这场魔法之旅吧!
|
6天前
|
运维 监控 Linux
自动化运维的魔法:如何用Python脚本简化日常任务
【9月更文挑战第13天】在数字化时代的浪潮中,自动化运维如同一股清流,为IT团队带来了效率和灵活性的双重提升。本文将深入探讨如何通过Python脚本实现日常运维任务的自动化,从而释放双手,让重复性工作变得轻松愉快。从环境搭建到实际案例分析,我们将一步步揭开自动化运维的神秘面纱,让你的运维之路更加顺畅。
|
16天前
|
存储 Java 开发者
python脚本实现原理
【9月更文挑战第4天】python脚本实现原理
30 5
|
13天前
|
运维 监控 API
自动化运维:使用Python脚本进行日常管理
【9月更文挑战第6天】在现代的IT环境中,自动化运维已成为提升效率、减少人为错误的关键。本文将介绍如何通过Python脚本简化日常的运维任务,包括批量配置管理和日志分析。我们将从基础语法讲起,逐步深入到脚本的实际应用,旨在为读者提供一套完整的解决方案,以实现运维工作的自动化和优化。
14 1
|
17天前
|
运维 Linux 测试技术
自动化运维:使用Python脚本简化日常任务
【8月更文挑战第34天】在快节奏的IT环境中,自动化运维成为提升效率、降低错误率的关键。本文以Python脚本为例,展示如何通过编写简单的脚本来自动化日常运维任务,如批量更改文件权限、自动备份数据等。文章不仅提供代码示例,还探讨了自动化运维带来的益处和实施时应注意的问题。
|
6天前
|
敏捷开发 测试技术 持续交付
自动化测试之美:如何用Selenium和Python打造高效测试脚本
【9月更文挑战第13天】在软件开发的海洋中,自动化测试是那抹不可或缺的亮色。它不仅提升了测试效率,还保障了产品质量。本文将带你领略使用Selenium和Python构建自动化测试脚本的魅力所在,从环境的搭建到脚本的编写,再到问题的排查,每一步都是对软件质量把控的深刻理解和实践。让我们开始这段探索之旅,解锁自动化测试的秘密吧!
8 0