python 遠程控制_用 Python 遠程控制你的電腦

用 Python 遠程控制你的電腦

一、前言

很多時候我們有這種需求,因為程序運行比較耗時,但是我們沒有足夠的時間等待。這個時候我們就可以用 Python 做一個遠程控制電腦的小工具,實現遠程控制電腦。當然,我們能做的操作十分有限,我們可以通過郵件和電腦進行通訊、然后讓電腦以截圖的方式為我們顯示程序當前運行的狀態。然后我們通過這個狀態進行判斷,用郵件發送一些預設好的指令。如果程序意外中斷了,我們可以進行讓它重新運行,如果程序按照我們的預期執行了,我們就可以遠程關機。

二、使用 yagmail 進行郵件發送

使用 yagmail 發郵件非常簡單,我們首先需要安裝兩個模塊:pip install yagmailpip install keyring

2.1、發送一個簡單的郵件

我們用 yagmail 來發一封簡單的郵件試試:import yagmailimport keyringsender = '發件郵箱'password = '發件人密碼'receiver = '收件郵箱'# 注冊yagmail.register(sender, password)# 用 SMTP 服務器發郵件yag = yagmail.SMTP(user=sender, host='smtp.163.com')# 設置郵件的內容contents = ['Do not go gentle into that good night!']# 發送郵件yag.send(receiver, '郵件主題', contents=contents)

這里密碼可以使用真實密碼,也可以使用授權碼。授權碼的獲得需要到各個郵件的網頁獲取,這里以網易郵箱為例:

215296418_1_20210211123455708

我們進入網頁版郵箱,依次點擊 1、2,進入如下頁面:

215296418_2_20210211123455865

點擊開啟,然后按照指引獲取授權碼即可。

在連接郵箱服務器的時候,我們設置的一個 host,這個同樣需要在郵箱網頁中獲取。其中 163 的郵箱地址為 smtp.163.com,QQ 郵箱服務器地址為 smtp.qq.com,其它郵箱的可以自己查找一下。

郵箱內容是一個列表,我們現在是放入了一句話。

在調用 send 方法發送郵件時,我們需要傳入幾個參數。第一個是收件人,第二個是郵件的主題,第三個就是郵件的內容了。郵件內容我們傳入開始的內容列表。大家可以使用自己的郵箱測試一下。

2.2、發送附件

yagmail 非常智能,我們不需要像原始的 email 模塊一樣,先將附件上傳到郵箱服務器,然后再發給收件人。yagmail 會自動識別內容中的資源文件,然后自動上傳:import yagmailimport keyringsender = '發件郵箱'password = '發件人密碼'receiver = '收件郵箱'# 注冊yagmail.register(sender, password)# 用 SMTP 服務器發郵件yag = yagmail.SMTP(user=sender, host='smtp.163.com')# 設置郵件的內容contents = ['im.jpg']# 發送郵件yag.send(receiver, '郵件主題', contents=contents)

其中 im.jpg 是我本地的一張圖片,在發送的時候 yagmail 會自動識別,然后發送出去。我們沒做什么修改,就完成了附件的發送。

我們也可以直接發送帶有圖片的郵件,而不是以附件的形式發送:import yagmailimport keyringsender = '發件郵箱'password = '發件人密碼'receiver = '收件郵箱'# 注冊yagmail.register(sender, password)yag = yagmail.SMTP(user=sender, host='smtp.163.com')contents = ['這是一張圖片',yagmail.inline('im.jpg')]yag.send(receiver, '郵件主題', contents=contents)

我們只要用 yagmail.inline 包含圖片路徑即可。不過需要注意,發送的內容不能單是一張圖片。

三、郵件讀取

郵件的讀取需要使用到 imbox 模塊。我們需要先使用 keyring 模塊讀取密碼,keyring 可以讀取到在 yagmail 中注冊了的郵箱密碼:import yagmailimport keyringfrom imbox import Imboxsender = '你的郵箱'# 獲取郵箱密碼password = keyring.get_password(sender)# 讀取郵箱郵件with Imbox('imap.163.com', sender, password, ssl=True) as imbox:# 讀取所有未讀郵件all_msg = imbox.messages(unread=True)

Imbox 對象就是我們的郵箱對象,里面包含了所有郵箱信息。我們調用 messages 方法就可以獲取所有郵件,如果我們將 unread 設置為 True,則表示讀取未讀郵件。獲取了所有郵件,我們就可以查看更多信息了:import yagmailimport keyringfrom imbox import Imboxsender = '你的郵箱'# 獲取郵箱密碼password = keyring.get_password(sender)# 讀取郵箱郵件with Imbox('imap.163.com', sender, password, ssl=True) as imbox:# 讀取所有未讀郵件all_msg = imbox.messages(unread=True)# 遍歷郵件for uid, message in all_msg:# 輸出郵件的主題print(message.subject)# 標記已讀imbox.mark_seen(uid)# 獲取郵件的文本內容msg = message.body['plain']

我們要實現控制電腦就需要一直讀取,我們可以使用 schedule 模塊設置定時任務:import timeimport scheduledef func():print('test')schedule.every(2).seconds.do(func)while True:schedule.run_pending()time.sleep(1)

這樣的話,可以每兩秒執行一次 func 函數。

四、開發電腦控制工具

我們定義一個 ComputerController 類,用于控制電腦。該類的最基本方法就發郵件和收郵件:import timeimport yagmailimport keyringimport schedulefrom imbox import Imboxclass ComputerController():TIME_SPACE = 10SMTP_163 = 'smtp.163.com'SMTP_QQ = 'smtp.qq.com'def __init__(self, user, receiver):self.user = userself.receiver = receiver# 注冊yagmail.register(self.user, '你的密碼')def send_main(self, msg):'''發郵件'''yag = yagmail.SMTP(user=self.user, host=self.SMTP_163)contents = [msg]yag.send(self.receiver, '來自電腦的郵件', contents=contents)def receive_mail(self):'''收郵件'''# 讀取密碼password = keyring.get_password('yagmail', self.user)with Imbox('imap.163.com', 'sockwz@163.com', password, ssl=True) as imbox:all_msg = imbox.messages(unread=True)for uid, message in all_msg:if '110' == message.subject:# 標記已讀imbox.mark_seen(uid)msg = message.body['plain']print(msg)def run_controller(self):# 定時讀取郵件schedule.every(self.TIME_SPACE).seconds.do(controller.receive_mail)while True:schedule.run_pending()time.sleep(self.TIME_SPACE)

我們只需要創建這個類就可以了:if __name__ == '__main__':controller = ComputerController('發件郵箱', '收件郵箱')controller.run_controller()

我們需要傳入收件郵箱和發件郵箱,另外還需要在 init 方法中,修改密碼即可。

五、實現一些預設功能

下面我們實現一些小功能。

5.1、截圖from PIL import ImageGrabdef grab_windows(self):im = ImageGrab.grab()im.save('status.jpg')

使用 Pillow 模塊需要先安裝:pip install pillow

5.2、關機import osdef shut_down(self):'''關機'''os.system('shutdown /s /t 0')

這個是通用的兩個功能。另外我們可以使用 pynput 模塊控制鍵盤,進行一些操作。這個需要根據自己電腦的情況操作,比如我使用 PyCharm 運行程序可以使用下列代碼運行程序:def run_program(self):'''運行程序'''with self.kb.pressed(Key.shift):self.kb.press(Key.f10)self.kb.release(Key.f10)

大家可以自己定制一些操作。整個程序完整代碼如下:import osimport timeimport yagmailimport keyringimport schedulefrom imbox import Imboxfrom PIL import ImageGrabfrom pynput.keyboard import *class ComputerController():TIME_SPACE = 10SMTP_163 = 'smtp.163.com'SMTP_QQ = 'smtp.qq.com'kb = Controller()def __init__(self, user, receiver):self.user = userself.receiver = receiver# 注冊yagmail.register(self.user, '授權碼或密碼')def send_main(self, msg):'''發郵件'''yag = yagmail.SMTP(user=self.user, host=self.SMTP_163)contents = [msg]yag.send(self.receiver, '來自電腦的郵件', contents=contents)def receive_mail(self):'''收郵件'''# 讀取密碼password = keyring.get_password('yagmail', self.user)with Imbox('imap.163.com', 'sockwz@163.com', password, ssl=True) as imbox:all_msg = imbox.messages(unread=True)for uid, message in all_msg:if '110' == message.subject:# 標記已讀imbox.mark_seen(uid)msg = message.body['plain']if msg[0].__contains__('截圖'):# 截圖self.grab_windows()# 發送截圖self.send_main('status.jpg')if msg[0].__contains__('重啟'):self.restart_server()time.sleep(3)self.grab_windows()self.send_main('status.jpg')if msg[0].__contains__('關機'):self.shut_down()def grab_windows(self):im = ImageGrab.grab()im.save('status.jpg')def restart_server(self):time.sleep(3)os.system('shutdown')time.sleep(3)os.system('startup')def run_program(self):'''運行程序'''with self.kb.pressed(Key.shift):self.kb.press(Key.f10)self.kb.release(Key.f10)def shut_down(self):'''關機'''os.system('shutdown /s /t 0')def run_controller(self):schedule.every(self.TIME_SPACE).seconds.do(controller.receive_mail)while True:schedule.run_pending()time.sleep(self.TIME_SPACE)if __name__ == '__main__':controller = ComputerController('發件郵箱', '收件郵箱')controller.run_controller()

我們在讀取郵件時只讀取主題為 110 的郵件,這樣可以避免干擾郵件。所以我們在發送郵件時需要將主題設置為 110,而郵件內容則是一些關鍵詞。比如截圖就是截圖操作,關機就是關機操作。這個可以自己定義。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533608.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533608.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533608.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

攝像頭圖像分析目標物體大小位置_一文讀懂圖像定位及跟蹤技術

文 | 傳感器技術在科學技術日新月異的今天,人們對機器設備的智能性、自主性要求也越來越高,希望其完全替代人的角色,把人們從繁重、危險的工作任務中解脫出來,而能否像人一樣具有感知周圍環境的能力已成為設備實現智能化自主化的關…

java 相對路徑獲取_在java項目中通過相對路徑獲取資源的方式

1.可以通過 類名.class.getResource方法獲取或者getSystemResource2.可以通過當前線程 Thread.currentThread().getContextClassLoader().getResource獲取public class TestDemo {public static void main(String[] args) throws FileNotFoundException, IOException {Properti…

python循環嵌套的外循環必須完全包含內循環_Python:循環與嵌套循環實現規律數列...

很多人覺得編程很難,其實換個想法,這就是個用來解決問題的工具,我們為了解決實際問題而來學習和使用編程,這樣編程學習有了目的性,動力會更強。就像現在十分熱門的Python技術,就是人工智能領域所需求的&…

python爬取正確但不出文件_使用BeautifulSoup進行Python抓取時不顯示所有行

我是美容小組的新手。我試圖從ESPN Fantasy Basketball Standings中獲取“Season Stats”表,但并不是返回所有行。經過一番研究,我認為這可能是一個問題html.parser,所以我用了lxml。我得到了同樣的結果。如果有人能告訴我如何得到所有球隊的…

pat乙級相當于什么水平_雅思6.5是什么水平?相當于托福多少分?

雅思和托福是當前社會中非母語人士的主流英語水平測試。準備出國留學的學生對這兩項考試并不陌生。對于一些學生來說,僅靠雅思成績并不足以申請他們最喜歡的學校。特別是對于申請北美院校的學生,托福成績是申請時提交語言成績的優先考慮事項。那么&#…

java時間方法_JAVA處理日期時間常用方法

轉載JAVA處理日期時間常用方法:1.java.util.CalendarCalendar 類是一個抽象類,它為特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日歷字段之間的轉換提供了一些方法,并為操作日歷字段(例如獲得下星期的日期)提供了一些方法。瞬間可…

python氣象_Python 在氣象上的應用

Python 在氣象上的應用0.7892019.03.15 23:19:31字數 913閱讀 1,024為什么選擇python功能齊全的編程語言,真正面向對象喜歡可讀的代碼出版質量圖繪制輕松讀/寫netcdf和grib數據輕松使用Fortran / C / C 廣泛的庫支持數字和非數字工作科學計算1.Numpy  Numpy是pyth…

雙飛翼布局內容不換行_web前端入門到實戰:圣杯布局和雙飛翼布局

稍微了解前端的人都知道,圣杯布局和雙飛翼布局是前端面試時必問的問題,因為它既能體現你懂HTML結構又能體現出你對DIVCSS布局的掌握,畢竟我們學習CSS主要就是為了更好地布局帶來最好的用戶體驗嘛~事實上,圣杯布局其實和…

java 去掉 t_關于Java:在LocalDateTime中不能刪除“ T”

這是問題所在:GetMapping("/main/search")public String search (RequestParam String departure,RequestParam String arrival,RequestParam String departureTime,Model model) {DateTimeFormatter formatter DateTimeFormatter.ofPattern("yyyy-…

數據結構知識點總結_大牛帶你學 | 考研數據結構中線性表中順序結構的知識點總結...

前言我們都知道,數據結構中邏輯結構可以劃分為線性結構(線性表)與非線性結構兩大類。而存儲結構指的是數據元素在計算機中的存儲及其邏輯關系的表現,也就是在計算機當中對邏輯結構的表示。線性表的存儲結構主要有順序結構和鏈式結構兩種實現形式。本文主…

java矩形翻轉_如何判斷一個點在旋轉后的矩形中

前言最近在做的一款游戲中,用到點與旋轉矩形的判定來獲得一個選中的物體。在此做個記錄如圖所示,黃色的顏料屏是旋轉的,如果不做處理直接判斷點是否在矩形中,那么點擊紅點的位置會判定為選中物體。顯然這是不對的。如果物體沒有旋…

python中用函數設計棧的括號匹配問題_數據結構和算法(Python版):利用棧(Stack)實現括號的匹配問題...

算法數據結構數據結構和算法(Python版):利用棧(Stack)實現括號的匹配問題在平時寫程序當中,我們會經常遇到程序當中括號的匹配問題,也就是在程序當中左括號的數量和右括號的數量必須相等。如果不相等的話則程序必然會報錯。Hint:在讀取程序的…

python創建空元組_Python——元組的基本語法(創建、訪問、修改、刪除)

原標題:Python——元組的基本語法(創建、訪問、修改、刪除)Python 元組的使用Python 的元組與列表類似,不同之處在于元組的元素不能修改。元組使用小括號 ( ),列表使用方括號 [ ]。元組創建很簡單,只需要在括號中添加元素&#xf…

openssl 生成證書_CentOS7 httpd(Apache)SSL 證書部署

在之前我的文章中我已經搭建了nextcloud服務器,現在我們需要通過域名及https訪問怎么辦1. 進行了簡單的httpd設置后,就可以為網站添加SSL證書功能了。2. 首先得獲取證書,有了證書才能添加。我們采用本地上傳的方式將SSL證書上傳到CentOS上。獲…

FJ的字符串java問題_藍橋杯VIP試題 之 基礎練習 FJ的字符串- JAVA

問題描述FJ在沙盤上寫了這樣一些字符串:A1 “A”A2 “ABA”A3 “ABACABA”A4 “ABACABADABACABA”… …你能找出其中的規律并寫所有的數列AN嗎?輸入格式僅有一個數:N ≤ 26。輸出格式請輸出相應的字符串AN,以一個換行符結束。…

java仿qq gui_Java仿QQ登入頁面

1.[代碼][Java]代碼package com.myqq.frame;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Cursor;import java.awt.FlowLayout;import java.awt.Font;import java.awt.GridLayout;import java.awt.Image;import java.awt.event.MouseAdapter;import ja…

python數據預處理 重復行統計_Python數據分析之數據預處理(數據清洗、數據合并、數據重塑、數據轉換)學習筆記...

1. 數據清洗1.1 空值和缺失值的處理?空值一般表示數據未知、不適用或將在以后添加數據。缺失值是指數據集中某個或某些屬性的值是不完整的。?一般空值使用None表示,缺失值使用NaN表示1.1.1 使用isnull()和notnull()函數?可以判斷數據集中是否存在空值和缺失值1.1…

java編寫系統登錄界面_java 登陸界面怎么寫,連接數據庫后

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓界面是package 界面類;import javax.jws.soap.SOAPBinding.Use;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing…

python如何復制oracle數據_Python使用cx_Oracle模塊將oracle中數據導出到csv文件的方法...

本文實例講述了Python使用cx_Oracle模塊將oracle中數據導出到csv文件的方法。分享給大家供大家參考。具體實現方法如下:# Export Oracle database tables to CSV files# FB36 - 201007117import sysimport csvimport cx_Oracleconnection raw_input("Enter Or…

JAVA構造函數是不是封裝_Java 封裝與構造函數

面向對象思想思想的三個特征:封裝,繼承,多態。封裝:表現:函數就是一個最基本的封裝體,類也是一個封裝體。好處:1、提高了代碼的復用性,2、隱藏了實現細節,可以對外提供可…