快速提示:用Python控制MacOS
核心要點
- 使用pyobjc(Python到Objective-C的橋接), Python可以控制macOS的幾乎所有方面,包括訪問操作系統API、控制正在運行的應用程序和操作窗口。
- 通過pyobjc訪問的AppKit模塊是控制macOS的強大工具。它允許Python列出所有正在運行的應用程序,激活特定應用程序並瀏覽每個應用程序的屬性。
- 使用Python與macOS交互可能需要對Objective-C命名約定進行一些探索和理解。但是,使用Python的
dir()
函數和pyobjc文檔,可以導航macOS API並執行任何可以用Objective-C完成的任務。
本文節選自《實用Python》,Stuart探討了使用Python控制Windows操作系統的方法。
在Mac上工作時,我們可以使用pyobjc(Python到Objective-C的橋接)來控制系統幾乎所有方面。 Apple通過AppKit模塊使大多數操作系統可控,而pyobjc使Python可以訪問所有這些功能。如果我們已經知道使用AppKit的方法來完成我們想要做的事情,那麼這將非常有用,但只需稍加探索,就可以遍歷操作系統API。
讓我們嘗試一個示例。首先,我們需要pyobjc,可以使用pip install pyobjc
安裝。這將安裝整個操作系統API橋接列表,允許訪問macOS的各種方面。目前,我們將考慮AppKit,它是用於構建和控制Mac桌面上的正在運行的應用程序的工具。
我們可以使用AppKit列出當前正在運行的所有應用程序:
>>> from AppKit import NSWorkspace >>> NSWorkspace.sharedWorkspace().runningApplications() ( "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", ) >>>
這將提供一個很長的NSRunningApplication對象列表。每個對像都對應於當前在桌面上運行的特定應用程序。許多是“不可見”的應用程序(正在運行但並非一定顯示窗口的應用程序),但其他一些是我們可能認為是實際應用程序的應用程序——例如Safari、Terminal等等。 NSRunningApplication在developer.apple.com上有文檔記錄,可以在其中查看其屬性。例如,每個應用程序都有一個localizedName
和一個bundleIdentifier
:
>>> for nsapp in NSWorkspace.sharedWorkspace().runningApplications(): ... print(f"{nsapp.localizedName()} -> {nsapp.bundleIdentifier()}") ... loginwindow -> com.apple.loginwindow BackgroundTaskManagementAgent -> com.apple.backgroundtaskmanagement.agent WindowManager -> com.apple.WindowManager CoreLocationAgent -> com.apple.CoreLocationAgent Terminal -> com.apple.Terminal Safari -> com.apple.Safari Spotlight -> com.apple.Spotlight Finder -> com.apple.finder
我們還可以看到NSRunningApplication對像有一個activate
函數,我們可以調用它來激活該應用程序,就像我們單擊Dock中的圖標一樣。因此,要查找Safari然後激活它,我們將使用該activate
函數。對activate
的調用需要options
的值,如文檔所述,這也需要從AppKit導入:
>>> from AppKit import NSWorkspace, NSApplicationActivateIgnoringOtherApps >>> safari_list = [x for x in NSWorkspace.sharedWorkspace().runningApplications() ... if x.bundleIdentifier() == 'com.apple.Safari'] >>> safari = safari_list[0] >>> safari.activateWithOptions_(NSApplicationActivateIgnoringOtherApps)
現在Safari已激活。
查找macOS API的Python版本
查找與Objective-C名稱對應的Python名稱可能有點棘手。如上面的代碼所示,Objective-C的activate
函數在Python中稱為activateWithOptions_
。有一套關於此名稱轉換的規則,pyobjc文檔對此進行了說明,但有時使用Python自己的dir()
函數來顯示對象的全部屬性,然後選擇看起來最合理的屬性會更快:
>>> from AppKit import NSWorkspace >>> NSWorkspace.sharedWorkspace().runningApplications() ( "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", ) >>>
哎呀!我們的safari(NSRunningApplication實例)有452個屬性!好吧,我們想要的那個可能被稱為類似“activate”的東西,所以:
>>> for nsapp in NSWorkspace.sharedWorkspace().runningApplications(): ... print(f"{nsapp.localizedName()} -> {nsapp.bundleIdentifier()}") ... loginwindow -> com.apple.loginwindow BackgroundTaskManagementAgent -> com.apple.backgroundtaskmanagement.agent WindowManager -> com.apple.WindowManager CoreLocationAgent -> com.apple.CoreLocationAgent Terminal -> com.apple.Terminal Safari -> com.apple.Safari Spotlight -> com.apple.Spotlight Finder -> com.apple.finder
啊哈!所以activateWithOptions_
是我們需要調用的函數的名稱。類似地,我們要傳遞給該函數的選項的名稱在AppKit本身中:
>>> from AppKit import NSWorkspace, NSApplicationActivateIgnoringOtherApps >>> safari_list = [x for x in NSWorkspace.sharedWorkspace().runningApplications() ... if x.bundleIdentifier() == 'com.apple.Safari'] >>> safari = safari_list[0] >>> safari.activateWithOptions_(NSApplicationActivateIgnoringOtherApps)
這個過程有時會感覺有點探索性,但是也可以從Python執行Objective-C可以執行的任何操作。
本文節選自《實用Python》,可在SitePoint Premium和電子書零售商處購買。
關於使用Python控制MacOS的常見問題解答(FAQ)
什麼是AppKit,如何在Python中使用它來控制MacOS?
AppKit是macOS SDK中的一個框架,其中包含在macOS應用程序中實現圖形化、事件驅動的用戶界面所需的所有對象。它提供廣泛的類和函數,用於創建和管理應用程序窗口、處理用戶輸入、繪製圖形以及執行與用戶界面相關的其他任務。在Python中,您可以使用PyObjC橋接來訪問AppKit和其他Objective-C框架。這允許您編寫可以控制macOS應用程序、操作窗口和與系統服務交互的Python腳本。
如何在Python中安裝PyObjC模塊?
PyObjC是一個Python到Objective-C的橋接,允許您使用Python編寫功能齊全的macOS應用程序。您可以使用Python包安裝程序pip來安裝它。打開終端窗口並鍵入以下命令:pip install pyobjc
。這將下載並安裝PyObjC模塊及其依賴項。安裝完成後,您可以使用import objc
在Python腳本中導入該模塊。
我收到“No module named AppKit”錯誤。我該怎麼辦?
此錯誤通常表示AppKit模塊未安裝或在您的Python環境中找不到。首先,確保您已安裝PyObjC模塊(其中包括AppKit)。如果您已安裝PyObjC但仍然收到此錯誤,則您可能正在使用未安裝PyObjC的不同Python環境。在這種情況下,您需要在正確的Python環境中安裝PyObjC,或切換到已安裝PyObjC的Python環境。
如何使用Python控制macOS應用程序?
使用PyObjC橋接,您可以使用Python通過發送AppleScript命令或使用腳本橋來控制macOS應用程序。例如,您可以啟動應用程序、操作窗口、發送擊鍵並執行其他任務。這需要很好地理解Python和AppleScript,以及應用程序的腳本接口。
如何使用Python操作macOS中的窗口?
AppKit框架提供了一些用於處理窗口的類,例如NSWindow
和NSApplication
。您可以使用這些類來獲取所有打開窗口的列表,將窗口置於最前面,調整窗口大小或移動窗口,以及執行其他與窗口相關的任務。這需要使用PyObjC橋接從Python訪問AppKit類。
我可以使用Python與macOS中的系統服務交互嗎?
是的,您可以使用Python和PyObjC橋接與macOS中的各種系統服務交互。例如,您可以使用NSWorkspace
類打開URL、啟動應用程序以及執行與用戶的workspace相關的其他任務。您還可以使用NSNotificationCenter
類來發布和觀察通知,這允許您的腳本響應系統事件。
如何從macOS中的Python腳本發送擊鍵?
您可以使用AppKit框架的NSEvent
類來創建和發布鍵盤事件,這實際上允許您從Python腳本發送擊鍵。這需要很好地理解NSEvent
類和鍵盤事件類型,以及您要按下的鍵的鍵碼。
我可以使用Python在macOS中繪製圖形嗎?
是的,AppKit框架提供了一些用於繪製圖形的類,例如NSGraphicsContext
、NSBezierPath
和NSColor
。您可以使用這些類來繪製線條、形狀和圖像,設置繪圖顏色以及執行其他繪圖任務。這需要使用PyObjC橋接從Python訪問AppKit類。
如何在macOS的Python腳本中處理用戶輸入?
AppKit框架提供了一些用於處理用戶輸入的類,例如NSEvent
和NSResponder
。您可以使用這些類來獲取鼠標事件、鍵盤事件和其他類型的用戶輸入。這需要使用PyObjC橋接從Python訪問AppKit類。
我可以使用Python編寫功能齊全的macOS應用程序嗎?
是的,使用PyObjC橋接,您可以使用Python編寫功能齊全的macOS應用程序。這包括使用窗口、按鈕和其他控件創建圖形用戶界面、處理用戶輸入、繪製圖形以及與系統服務交互。但是,這需要很好地理解Python和macOS SDK,以及AppKit框架和其他Objective-C框架。
以上是快速提示:用Python控制MacOS的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。
