python控制台动画_Python真神奇,带你体验另类的“全自动编程”
近年來“自動(dòng)編程”、“智能編程”方面的項(xiàng)目層出不窮,例如AutoML、kite,以及最近風(fēng)靡一時(shí)的python_autocomplete,這些項(xiàng)目有一個(gè)共同點(diǎn),就是基于機(jī)器學(xué)習(xí)模型,致力于提升代碼補(bǔ)全和自動(dòng)生成水平。
不過今天要展示的自動(dòng)編程與上述概念不同,這次我們不講學(xué)術(shù)、不論實(shí)用,抱著娛樂的心態(tài)體驗(yàn)一把另類的“全自動(dòng)編程”模式。
01.項(xiàng)目介紹
今天要介紹的這個(gè)庫的名字叫pynput,與人工智能無關(guān),這是一個(gè)控制和監(jiān)控計(jì)算機(jī)輸入設(shè)備的庫,這是他的GitHub地址(詳細(xì)見文末),從庫的簡介中可以看到,目前僅支持鼠標(biāo)和鍵盤兩種基本的輸入設(shè)備。
接下來我們打開文檔,看看pynput究竟有哪些功能。從文檔目錄(下圖)來看,關(guān)于pynput的說明大體分為三個(gè)部分:分別是鼠標(biāo)事件、鍵盤事件和平臺(tái)限制。
先來簡單說一下平臺(tái)限制,因?yàn)槭玛P(guān)外部輸入設(shè)備,在不同的操作系統(tǒng)中肯定會(huì)有一些差異和功能限制,例如Linux下需要設(shè)置環(huán)境變量$ DISPLAY、MAC操作系統(tǒng)限制了對(duì)鍵盤的監(jiān)控、Windows中進(jìn)程間的虛擬事件傳遞可能受限等等。
總的來說,平臺(tái)限制并不影響基本的使用(特別是在Windows系統(tǒng)中),我們暫且放下不談。
接著我們重點(diǎn)聊一聊鼠標(biāo)事件和鍵盤事件。先來說鼠標(biāo)事件部分,pynput對(duì)鼠標(biāo)事件的處理主要分為控制和監(jiān)控兩大部分。
在鼠標(biāo)控制部分,可以通過代碼模擬鼠標(biāo)的移動(dòng)、單擊、雙擊、滾輪等操作,下面這張圖就是文檔中的演示代碼,函數(shù)名稱和實(shí)際事件名基本一致,很容易理解。
在鼠標(biāo)事件的監(jiān)控部分,監(jiān)控任務(wù)Listener實(shí)際上是一個(gè)threading.Thread對(duì)象,采用回調(diào)函數(shù)的方式實(shí)時(shí)監(jiān)控鼠標(biāo)行為(下圖是文檔中的演示代碼)。既然是threading.Thread對(duì)象,Listener當(dāng)然也就有阻塞和非阻塞兩種模式,一般來說,如果想要監(jiān)控物理鼠標(biāo)的行為,使用阻塞模式比較合適,如果想要監(jiān)控pynput的模擬鼠標(biāo)操作,建議采用非阻塞模式。
再來看鍵盤事件部分,和鼠標(biāo)事件類似,pynput對(duì)鍵盤事件的處理也是分為控制和監(jiān)控兩大部分,函數(shù)結(jié)構(gòu)和操作模式也跟鼠標(biāo)事件基本相同,這里就不展示文檔中的演示代碼了。有一點(diǎn)需要注意的是,鍵盤操作中有一些特殊方法,比如“ctrl+”、‘“shift+”、“alt+”這類的組合鍵,還有F1~FN、backspace、delete、insert等特殊功能鍵,在pynput中都有專門的定義,在操作時(shí)可以直接使用。
02.功能演示
介紹完基本功能,我們就寫一段代碼試一試pynput的設(shè)備控制以及監(jiān)控效果,由于上文中重點(diǎn)介紹了關(guān)于鼠標(biāo)事件的處理,這里就以鍵盤事件處理為例進(jìn)行演示。
我們?cè)O(shè)計(jì)這樣一個(gè)程序:
- 主線程:隨機(jī)生成20個(gè)(準(zhǔn)確地說是19個(gè))小寫英文字母,并用pynput模擬鍵盤輸入,在第10個(gè)字母輸入后附加輸入一個(gè)退格鍵(backspace)。
- 監(jiān)控線程:對(duì)鍵盤的按鍵和松開兩種操作進(jìn)行監(jiān)控,同時(shí)在控制臺(tái)輸出相關(guān)信息,當(dāng)遇到退格鍵(backspace)松開這一事件時(shí),終止監(jiān)控線程。
為了便于觀察,在每個(gè)隨機(jī)字符串輸入后加入一個(gè)0.5s的時(shí)間間隔,另外由于這里是要監(jiān)控虛擬的鍵盤按鍵事件,因此監(jiān)控線程使用非阻塞模式,代碼如下:
一起來看下這段代碼的動(dòng)態(tài)執(zhí)行情況,在下面這段動(dòng)畫中字符(包括退格鍵)的輸入全部都是基于pynput自動(dòng)實(shí)現(xiàn)的。
通過上面這個(gè)動(dòng)畫可以看到,在程序運(yùn)行的前半部分,輸入結(jié)果和監(jiān)控結(jié)果是完全一致的,直到退格鍵(backspace)事件發(fā)生后,控制臺(tái)就不再輸出監(jiān)控信息,這是因?yàn)楸O(jiān)控線程已經(jīng)被終止掉了,但是模擬鍵盤輸入仍然會(huì)繼續(xù),直到指定數(shù)量的字符串全部輸入完畢為止。通過這個(gè)例子應(yīng)該就能很好地理解pynput的監(jiān)控線程了,有興趣的朋友不妨自己體會(huì)一下。
至于鼠標(biāo)事件的控制、監(jiān)控功能,因?yàn)楹玩I盤事件十分類似,這里就不再重復(fù)演示了。另外,由于鼠標(biāo)沒有鍵盤中那么多復(fù)雜的、各式各樣的功能鍵,從某種意義上說鼠標(biāo)事件的處理要比鍵盤事件處理更簡單一些。
03.神奇的"自動(dòng)編程"
最后,我們回到今天的主題,把鼠標(biāo)事件和鍵盤事件的控制結(jié)合起來,實(shí)現(xiàn)一個(gè)“全自動(dòng)編程”的功能。事實(shí)上這里實(shí)現(xiàn)的“自動(dòng)編程”與人工智能無關(guān),也不是傳統(tǒng)的代碼匹配補(bǔ)全,而是控制鼠標(biāo)和鍵盤按照我們提前設(shè)置好的步驟自動(dòng)運(yùn)行。
為了方便,我們就用最簡單的“Hello World”來進(jìn)行演示,在sublime中完成“Hello World”程序大概需要經(jīng)過以下幾個(gè)步驟:新建一個(gè)sublime文件——命名、保存為py文件——在新建的py文件中輸入“print(‘Hello World’)”語句——再次保存——運(yùn)行新的程序。
前文講到過,pynput可以模擬所有的鼠標(biāo)和鍵盤操作,上面步驟中的操作自然也可以由pynput模擬完成,就跟手動(dòng)操作一樣。我們把以上操作全部寫到腳本中,同時(shí)加入鼠標(biāo)和鍵盤的監(jiān)控線程,在腳本啟動(dòng)后不僅會(huì)自動(dòng)編寫運(yùn)行“Hello World”程序,還會(huì)對(duì)鼠標(biāo)和鍵盤的模擬操作進(jìn)行實(shí)時(shí)監(jiān)控,并將相關(guān)信息輸出到控制臺(tái)。
先來看結(jié)果,下面這個(gè)動(dòng)畫就是我們寫的“自動(dòng)編程”腳本的運(yùn)行情況,整個(gè)過程全部自動(dòng)執(zhí)行,沒有任何手動(dòng)干預(yù)。
在整個(gè)過程中,所有的鼠標(biāo)和鍵盤事件都會(huì)被監(jiān)控線程記錄,包括每一次鍵盤按鍵的點(diǎn)擊和釋放、鼠標(biāo)的移動(dòng)和點(diǎn)擊等。
下面我們來看看這個(gè)腳本的核心代碼,可以看到,我們使用pynput模擬了所有與鼠標(biāo)和鍵盤有關(guān)的操作,使用這種方法還可以編寫更加復(fù)雜的程序,只需要改變keycontroller.type的輸入內(nèi)容就可以。
友情提示:
正如本文開頭所說,使用pynput實(shí)現(xiàn)的所謂“自動(dòng)編程”僅僅是一種娛樂,并沒有太多實(shí)用價(jià)值。但是pynput對(duì)于輸入設(shè)備的控制和監(jiān)控在實(shí)踐中倒是有可能會(huì)用得上,至于如何發(fā)揮他的作用,就要看自己的想象力了。
總結(jié)
以上是生活随笔為你收集整理的python控制台动画_Python真神奇,带你体验另类的“全自动编程”的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 萨默尔机器人_第四届丝博会人工智能受热捧
- 下一篇: websocket python爬虫_p