文章背景
家里的第一台電腦是在2006年夏天買的,10年上大學之后基本上就沒人用,過沒兩年就當二手賣給一個熟人。
弟弟小我10歲,今年剛上初一。他在我畢業前半年就整天用媽媽的手機發短信給我,問我什么時候把學校里的台式機寄回家給他用。雖然從小就一直因為玩電腦的問題跟爸媽時不時有點小別扭,可是我還是非常鼓勵弟弟接觸電腦和網絡的。可能有人會說小孩子就只會玩游戲,玩游戲怎么了?小孩子的天性不就是玩嘛,在娛樂的過程中其實是可以潛移默化地學會許多計算機日常使用的知識,還可以通過互聯網跟已經認識、尚未認識的朋友進行溝通交流,好處多多的是。
然而,凡事都得有個度。初中生不可能像我們成年人一樣懂得克制自己(且不說很多大人都會沉迷在這個虛擬世界里),我就萌生了寫一個程序限制弟弟平日玩電腦時間的想法。
技術選型
其實我的第一想法是用Java,因為平時用的最多的就是它,而且除了C++之外就沒有再用過別的語言。
程序的基本思路
- 用一個txt文件記錄電腦的一天內累計使用時間
- 累計使用時間超過若干小時就會自動關機
- 程序開機自動運行
為什么我最后選擇了python
想着怎么寫、搜資料的時候就發現Java並不適合,雖然不是不能實現,但有好幾個問題解決起來都有點麻煩。對我這么一個“懶”程序員來說,已經構成了“棄用”的充分理由。就舉一個簡單的例子好了,最后會使用系統的關機命令實現自動關機這個功能,用Java+運行windows命令搜出來一大堆東西,看着就頭疼。畢竟是業余時間玩玩,沒必要這么耗腦子。
可是用python就只需要用到兩行代碼!
1 #關機命令 2 cmd="cmd.exe /k shutdown -s -t 0"; 3 4 #執行關機命令 5 os.system(cmd)
動手寫代碼
在網上一通亂搜之后,很快就把測試用的代碼給寫出來了。
1 #! /usr/bin/env python 2 3 #coding=utf-8 4 5 import os 6 import time 7 import datetime 8 9 #根據是否工作日設置限制時間 10 if datetime.date.today().weekday()<5: 11 timeLimit = 20 12 else: 13 timeLimit = 40 14 15 #讀取文本中記錄的日期 16 f = open('E:\\thefile.txt','r+') 17 f_date = f.readline() 18 f.close 19 20 #讀取系統日期,並與文本日期進行比對 21 #如果不相等,則清空文件,進行當日初始化 22 n_date = time.strftime("%d/%m/%Y")+"\n" 23 if f_date != n_date: 24 print("sucessed") 25 f = open('E:\\thefile.txt','r+') 26 f.truncate() 27 f.close 28 f = open('E:\\thefile.txt','r+') 29 f.write((n_date)) 30 run_time="0" 31 f.write(run_time) 32 f.close 33 34 #死循環語句,當且僅當運行時間大於等於限制時間時跳出循環 35 while 2 > 1 : 36 f = open('E:\\thefile.txt','r+') 37 f_date = f.readline() 38 run_time = f.readline() 39 run = int(run_time) 40 print(run) 41 time.sleep(2) 42 if run<timeLimit: 43 run = run + 1 44 f.truncate() 45 f.close 46 f = open('E:\\thefile.txt','r+') 47 f.write(f_date) 48 run_time = str(run) 49 f.write(run_time) 50 f.close 51 else: 52 break 53 54 #關機命令 55 cmd="cmd.exe /k shutdown -s -t 0"; 56 57 print(cmd)
為了方便大家理解程序,再把txt文件中的內容貼出來以供參考
01/10/2014
20
需要特別提出的幾個點
第一,因為需要實現開機自啟動,所以要把python文件復制到系統的“啟動”文件夾里。
第二,由於.py文件啟動后會有控制台界面出現,非常影響使用效果,因此要把.py文件的后綴改成.pyw。
第三,不需要擔心如果自己想要用電腦的話會受到這個限制,只要在開機六分鍾內把python進程關掉即可。
最后的成果
忙活了一會,終於把實際使用的代碼寫完。
1 #! /usr/bin/env python 2 3 #coding=utf-8 4 5 import os 6 import time 7 import datetime 8 9 #根據是否工作日設置限制時間 10 if datetime.date.today().weekday()<5: 11 timeLimit = 20 12 else: 13 timeLimit = 40 14 15 #讀取文本中記錄的日期 16 f = open('E:\\thefile.txt','r+') 17 f_date = f.readline() 18 f.close 19 20 #讀取系統日期,並與文本日期進行比對 21 #如果不相等,則清空文件,進行當日初始化 22 n_date = time.strftime("%d/%m/%Y")+"\n" 23 if f_date != n_date: 24 print("sucessed") 25 f = open('E:\\thefile.txt','r+') 26 f.truncate() 27 f.close 28 f = open('E:\\thefile.txt','r+') 29 f.write((n_date)) 30 run_time="0" 31 f.write(run_time) 32 f.close 33 34 #死循環語句,當且僅當運行時間大於等於限制時間時跳出循環 35 while 2 > 1 : 36 f = open('E:\\thefile.txt','r+') 37 f_date = f.readline() 38 run_time = f.readline() 39 run = int(run_time) 40 time.sleep(360) 41 if run<timeLimit: 42 run = run + 1 43 f.truncate() 44 f.close 45 f = open('E:\\thefile.txt','r+') 46 f.write(f_date) 47 run_time = str(run) 48 f.write(run_time) 49 f.close 50 else: 51 break 52 53 #關機命令 54 cmd="cmd.exe /k shutdown -s -t 0"; 55 56 #執行關機命令 57 os.system(cmd)
周一到周五,弟弟能用電腦的時間最多只能是兩個小時;而周末,則是四個小時。
感想
1. 雖然這只是一個很簡單的小程序,幾乎可以說是毫無難度可言,但是起到的作用還是挺大的。因為我跟哥哥工作都不在家,平時都是媽媽管着弟弟,每次都要盯着他,不能讓他玩電腦太長時間,有的時候要很大聲地讓他快點關機寫作業。現在,只要大家商量好平時用電腦的時間,設定好參數就行。媽媽可以安心地做自己的事情,弟弟也可以心安理得地玩他想玩的游戲。(制定規則,以一種便捷和不容分辨的方式執行,而這種方式和途徑就是減少摩擦的潤滑劑)
2. 平時工作都是用Java,業余時間用別的語言(例如python)玩玩是一個蠻有趣的做法。以興趣和小作品作為驅動,說不定以后能成為你跳槽或者轉型的憑借。
3. 作為程序員,編程是我們的飯碗,同時也可以是我們改變生活、轉變思路的工具,哪怕這種影響在別人看來微不足道。
PS:關於編程、關於在現實生活中的創意和需求,大家如果有什么有趣好玩的想法,非常歡迎在評論中留言一起分享。也可以關注我的微信公眾號,“華工小y”繼續交流。
