Heim >Backend-Entwicklung >Python-Tutorial >Schneller Tipp: MacOS mit Python steuern
Kernpunkte
dir()
-Funktionen und PyobJC-Dokumentation können Sie jedoch die MacOS-API steuern und alle Aufgaben ausführen, die mit Objective-C erfolgen können. Dieser Artikel wird aus "praktischem Python" ausgewählt, und Stuart diskutiert die Methode, Python zur Steuerung des Windows -Betriebssystems zu verwenden.
Wenn wir auf einem Mac arbeiten, können wir Pyobjc (eine Brücke von Python zu Objective-C) verwenden, um fast alle Aspekte des Systems zu steuern. Apple macht die meisten Betriebssysteme über das AppKit -Modul steuerbar, während Pyobjc alle diese Funktionen für Python zugänglich macht. Dies wäre sehr nützlich, wenn wir bereits wüssten, wie man die Methode von AppKit verwendet, um das zu tun, was wir tun wollen, aber durch die Operationssystem -API mit nur ein wenig Erkundung iterieren.
Versuchen wir ein Beispiel. Zunächst brauchen wir Pyobjc, das mit pip install pyobjc
installiert werden kann. Dadurch wird die gesamte Betriebssystem -API -Brückenliste installiert, die den Zugriff auf verschiedene Aspekte von macOS ermöglicht. Im Moment werden wir Appkit in Betracht ziehen, ein Tool zum Erstellen und Steuern von laufenden Anwendungen auf Ihrem Mac -Desktop.
Wir können Appkit verwenden, um alle derzeit ausgeführten Anwendungen aufzulisten:
<code class="language-python">>>> from AppKit import NSWorkspace >>> NSWorkspace.sharedWorkspace().runningApplications() ( "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", ) >>></nsrunningapplication:></nsrunningapplication:></nsrunningapplication:></nsrunningapplication:></nsrunningapplication:></nsrunningapplication:></nsrunningapplication:></nsrunningapplication:></code>
Dies enthält eine lange Liste von NSRunningApplication -Objekten. Jedes Objekt entspricht einer bestimmten Anwendung, die derzeit auf dem Desktop ausgeführt wird. Viele sind "unsichtbare" Anwendungen (die ausgeführt werden, aber nicht unbedingt Windows anzeigen). Andere sind jedoch Anwendungen, die wir als tatsächliche Anwendungen betrachten können - wie Safari, Terminal usw. NsrunningApplication hat Dokumentation über Entwickler.Apple.com, wo seine Eigenschaften angezeigt werden können. Zum Beispiel hat jede Anwendung eine localizedName
und ein bundleIdentifier
:
<code class="language-python">>>> 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</code>
Wir können auch sehen, dass das NSRunningApplication -Objekt über eine activate
-Funktion verfügt, die wir aufrufen können, um die Anwendung zu aktivieren, genau wie wir auf das Symbol im Dock klicken würden. Um Safari zu finden und sie dann zu aktivieren, werden wir die activate
-Funktion verwenden. Der Anruf nach activate
erfordert den Wert von options
, wie in der Dokumentation angegeben, für die auch der Importieren von Appkit:
<code class="language-python">>>> 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)</code>
Safari ist jetzt aktiviert.
Finden Sie die Python -Version von macOS api
Python-Namen finden, die den Ziel-C-Namen entsprechen, kann etwas schwierig sein. Wie im obigen Code gezeigt, wird die Funktion des Objective-C activate
in Python activateWithOptions_
bezeichnet. Es gibt eine Reihe von Regeln für diesen Namensumwandlungen, die die Pyobjc -Dokumentation erklärt, aber manchmal ist es schneller, Pythons eigene dir()
-Funktion zu verwenden, um alle Eigenschaften eines Objekts anzuzeigen und dann die Eigenschaften auszuwählen, die am vernünftigsten aussehen:
<code class="language-python">>>> from AppKit import NSWorkspace >>> NSWorkspace.sharedWorkspace().runningApplications() ( "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", "<nsrunningapplication: lsasn:="">", ) >>></nsrunningapplication:></nsrunningapplication:></nsrunningapplication:></nsrunningapplication:></nsrunningapplication:></nsrunningapplication:></nsrunningapplication:></nsrunningapplication:></code>
Oh! Unsere Safari (nsrunningApplication -Instanz) hat 452 Eigenschaften! Nun, der, den wir wollen, könnte so etwas wie "aktivieren" genannt werden, also:
<code class="language-python">>>> 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</code>
ahhh! activateWithOptions_
ist also der Name der Funktion, die wir aufrufen müssen. In ähnlicher Weise ist der Name der Option, die wir an die Funktion übergeben möchten, in Appkit selbst:
<code class="language-python">>>> 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)</code>
Dieser Prozess kann sich manchmal ein wenig erforschend anfühlen, aber er kann auch von Python durchgeführt werden, dass Objective-C alles kann.
Dieser Artikel ist aus praktischem Python ausgewählt und kann bei SitePoint Premium- und E-Book-Einzelhändlern gekauft werden.
FAQs über die Verwendung von Python zur Steuerung macOS
Appkit ist ein Framework im MacOS-SDK, das alle Objekte enthält, die zur Implementierung einer grafischen, ereignisgesteuerten Benutzeroberfläche in MacOS-Anwendungen erforderlich sind. Es bietet eine breite Palette von Klassen und Funktionen zum Erstellen und Verwalten von Anwendungsfenstern, zur Verarbeitung von Benutzereingaben, zum Zeichnen von Grafiken und zum Ausführen anderer Aufgaben, die sich auf die Benutzeroberfläche beziehen. In Python können Sie Pyobjc Bridge verwenden, um auf Appkit und andere objektive C-Frameworks zuzugreifen. Auf diese Weise können Sie Python -Skripte schreiben, mit denen MacOS -Anwendungen, Betriebsfenster und Interaktionen mit Systemdiensten steuern können.
pyobjc ist ein Python-to-Objective-C-Brücke, mit dem Sie voll ausgestattete MacOS-Anwendungen in Python schreiben können. Sie können das Python Package Installer Pip verwenden, um es zu installieren. Öffnen Sie ein Terminalfenster und geben Sie den folgenden Befehl ein: pip install pyobjc
. Dadurch wird das PyobJC -Modul und seine Abhängigkeiten heruntergeladen und installiert. Nach Abschluss der Installation können Sie das Modul in einem Python -Skript mit import objc
importieren.
Dieser Fehler bedeutet normalerweise, dass das AppKit -Modul nicht in Ihrer Python -Umgebung installiert oder nicht gefunden wird. Stellen Sie zunächst sicher, dass das PyobJC -Modul installiert ist (einschließlich AppKit). Wenn Sie Pyobjc installiert haben, aber diesen Fehler erhalten, verwenden Sie möglicherweise eine andere Python -Umgebung, in der Pyobjc nicht installiert ist. In diesem Fall müssen Sie Pyobjc in der richtigen Python -Umgebung installieren oder zu einer Python -Umgebung wechseln, wobei Pyobjc installiert ist.
Verwenden von Pyobjc Bridge können Sie MacOS -Anwendungen mithilfe von Python steuern, indem Sie AppleScript -Befehle oder mit Skriptbrücken senden. Sie können beispielsweise eine Anwendung starten, ein Fenster bedienen, Tastenanschläge senden und andere Aufgaben ausführen. Dies erfordert ein gutes Verständnis von Python und AppleScript sowie der Skriptoberflächen der Anwendung.
AppKit Framework bietet einige Klassen für die Umstellung von Fenstern wie NSWindow
und NSApplication
. Sie können diese Klassen verwenden, um eine Liste aller geöffneten Fenster zu erhalten, das Fenster nach vorne zu setzen, die Größe zu ändern oder das Fenster zu verschieben und andere Fensteraufgaben auszuführen. Dies erfordert den Zugriff auf die Appkit -Klasse von Python mit der Pyobjc Bridge.
Ja, Sie können Python und Pyobjc Bridge verwenden, um mit verschiedenen Systemdiensten in MacOS zu interagieren. Sie können beispielsweise die NSWorkspace
-Klassesklasse verwenden, um eine URL zu öffnen, eine Anwendung zu starten und andere Aufgaben im Zusammenhang mit dem Arbeitsbereich des Benutzers auszuführen. Sie können auch die NSNotificationCenter
-Klasse verwenden, um Benachrichtigungen zu veröffentlichen und zu beobachten, mit denen Ihr Skript auf Systemereignisse reagieren kann.
Sie können die NSEvent
-Klasses von AppKit Framework verwenden, um Tastaturereignisse zu erstellen und zu veröffentlichen, mit denen Sie Tastenanschläge aus Python -Skripten senden können. Dies erfordert ein gutes Verständnis der Ereignientypen NSEvent
sowie des Tastaturereignisses sowie des Tastencodes der Taste, die Sie drücken möchten.
Ja, das Appkit -Framework bietet einige Klassen zum Zeichnen von Grafiken wie NSGraphicsContext
, NSBezierPath
und NSColor
. Sie können diese Klassen verwenden, um Linien, Formen und Bilder zu zeichnen, Zeichnungsfarben zu setzen und andere Zeichenaufgaben auszuführen. Dies erfordert den Zugriff auf die Appkit -Klasse von Python mit der Pyobjc Bridge.
AppKit -Framework enthält einige Klassen für die Verarbeitung von Benutzereingaben wie NSEvent
und NSResponder
. Sie können diese Klassen verwenden, um Mausereignisse, Tastaturereignisse und andere Arten von Benutzereingaben zu erhalten. Dies erfordert den Zugriff auf die Appkit -Klasse von Python mit der Pyobjc Bridge.
Ja, mit Pyobjc Bridging können Sie voll ausgestattete MacOS-Anwendungen in Python schreiben. Dazu gehört das Erstellen einer grafischen Benutzeroberfläche mithilfe von Windows, Schaltflächen und anderen Steuerelementen, der Verarbeitung von Benutzereingaben, Zeichnen von Grafiken und der Interaktion mit Systemdiensten. Dies erfordert jedoch ein gutes Verständnis des Python- und MacOS-SDK sowie des Appkit-Frameworks und anderen objektiven C-Frameworks.
Das obige ist der detaillierte Inhalt vonSchneller Tipp: MacOS mit Python steuern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!