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