不少時候,咱們都有遠程控制電腦的需求。好比正在下載某樣東西,須要讓電腦在下載完後關機。或者你須要監控一個程序的運行情況等。python
今天咱們就來用Python實現一個遠程監控並控制電腦的小程序。小程序
聽起來遠程控制電腦好像很高級的樣子,可是實現起來其實很是簡單。實現原理以下:markdown
與其說是學習如何遠程控制電腦,還不如說是學習如何讀取郵件。固然,上面的的流程只實現了遠程控制電腦,而沒實現對電腦的監控。而監控的操做能夠以截圖的方式來進行。函數
咱們能夠預設一個指令,當讀取到郵件內容爲grab時,咱們就發送電腦截圖。如何將電腦截圖發送給手機郵箱,這樣就達到了監控的效果。oop
關於如何發送郵件能夠參考博客:如何用Python發送郵件?。這裏就再也不詳細說了。下面咱們看看如何讀取郵件。學習
讀取郵件須要使用到imbox模塊,安裝語句以下:ui
pip install imbox
複製代碼
讀取郵件的代碼以下:spa
from imbox import Imbox
def read_mail(username, password):
with Imbox('imap.163.com', username, password, ssl=True) as box:
all_msg = box.messages(unread=True)
for uid, message in all_msg:
# 若是是手機端發來的遠程控制郵件
if message.subject == 'Remote Control':
# 標記爲已讀
box.mark_seen(uid)
return message.body['plain'][0]
複製代碼
首先咱們用with語句,打開郵箱。而後經過下面語句獲取全部的未讀郵件:.net
all_msg = box.messages(unread=True)
複製代碼
獲取未讀郵件後,對郵件進行遍歷。將主題爲「Reomte Control」的郵件標記爲已讀,並返回文本內容。命令行
這裏須要注意,由於咱們篩選出了主題爲「Remote Control」的郵件,所以咱們在用手機發郵件的時候須要將主題設置爲「Remote Control」,這樣能夠避免其它郵件的干擾。
截圖須要使用到PIL模塊,安裝以下:
pip install pillow
複製代碼
截圖的代碼很簡單:
from PIL import ImageGrab
def grab(sender, to):
# 截取電腦全屏
surface = ImageGrab.grab()
# 將截屏保存爲surface.jpg
surface.save('surface.jpg')
# 將截屏發送給手機
send_mail(sender, to, ['surface.jpg'])
複製代碼
其中send_mail的代碼以下:
import yagmail
def send_mail(sender, to, contents):
smtp = yagmail.SMTP(user=sender, host='smtp.163.com')
smtp.send(to, subject='Remote Control', contents=contents)
複製代碼
關於發送郵件的介紹能夠參考上面提到的博客。
關機的操做很是簡單,咱們能夠用python來執行命令行語句便可。代碼以下:
import os
def shutdown():
# 關機
os.system('shutdown -s -t 0')
複製代碼
除了關機,咱們還能夠執行不少操做。對於一些複雜的操做,咱們能夠預編寫一些bat文件,這裏就不演示了。
上面咱們編寫了各個部分的代碼,而後再來看看主體部分的代碼:
def main():
# 電腦用來發送郵件已經電腦讀取的郵箱
username = 'sockwz@163.com'
password = '********'
# 手機端的郵箱
receiver = '2930777518@qq.com'
# 讀取郵件的時間間隔
time_space = 5
# 註冊帳戶
yagmail.register(username, password)
# 循環讀取
while True:
# 讀取未讀郵件
msg = read_mail(username, password)
if msg:
# 根據不一樣的內容執行不一樣操做
if msg == 'shutdown':
shutdown()
elif msg == 'grab':
grab(username, receiver)
time.sleep(time_space)
複製代碼
其中:
yagmail.register(username, password)
複製代碼
會使用到keyring
模塊,安裝以下:
pip install keyring
複製代碼
後面咱們能夠根據本身的需求編寫一些其它功能。下面是完整的代碼:
import os
import time
import yagmail
from imbox import Imbox
from PIL import ImageGrab
def send_mail(sender, to, contents):
smtp = yagmail.SMTP(user=sender, host='smtp.163.com')
smtp.send(to, subject='Remote Control', contents=contents)
def read_mail(username, password):
with Imbox('imap.163.com', username, password, ssl=True) as box:
all_msg = box.messages(unread=True)
for uid, message in all_msg:
# 若是是手機端發來的遠程控制郵件
if message.subject == 'Remote Control':
# 標記爲已讀
box.mark_seen(uid)
return message.body['plain'][0]
def shutdown():
os.system('shutdown -s -t 0')
def grab(sender, to):
surface = ImageGrab.grab()
surface.save('surface.jpg')
send_mail(sender, to, ['surface.jpg'])
def main():
username = 'sockwz@163.com'
password = '你的受權碼'
receiver = '2930777518@qq.com'
time_space = 5
yagmail.register(username, password)
while True:
# 讀取未讀郵件
msg = read_mail(username, password)
if msg:
if msg == 'shutdown':
shutdown()
elif msg == 'grab':
grab(username, receiver)
time.sleep(time_space)
if __name__ == '__main__':
main()
複製代碼