Maison >développement back-end >Tutoriel Python >Astuce rapide: contrôler les macOS avec Python

Astuce rapide: contrôler les macOS avec Python

Christopher Nolan
Christopher Nolanoriginal
2025-02-15 12:28:12303parcourir

Quick Tip: Controlling macOS with Python

Points de base

  • En utilisant pyOBJC (python to Objective-C pont), Python peut contrôler presque tous les aspects de MacOS, y compris l'accès à l'API du système d'exploitation, le contrôle des applications en cours d'exécution et des fenêtres de fonctionnement.
  • Le module AppKit accessible via PYOBJC est un outil puissant pour contrôler les macOS. Il permet à Python de répertorier toutes les applications en cours d'exécution, d'activer des applications spécifiques et de parcourir les propriétés de chaque application.
  • L'interaction avec le macOS à l'aide de Python peut nécessiter une certaine exploration et compréhension de la convention de dénomination objective-C. Cependant, en utilisant les fonctions dir() de Python et la documentation PYOBJC, vous pouvez naviguer dans l'API MacOS et effectuer toutes les tâches qui peuvent être effectuées avec Objective-C.

Cet article est extrait de "Practical Python", et Stuart discute de la méthode d'utilisation de Python pour contrôler le système d'exploitation Windows.

Lorsque vous travaillez sur un Mac, nous pouvons utiliser PyOBJC (un pont de Python à Objective-C) pour contrôler presque tous les aspects du système. Apple rend la plupart des systèmes d'exploitation contrôlables via le module AppKit, tandis que PyOBJC rend toutes ces fonctionnalités accessibles à Python. Ce serait très utile si nous savions déjà comment utiliser la méthode d'Appkit pour faire ce que nous voulons faire, mais parcourez l'API du système d'exploitation avec juste une petite exploration.

essayons un exemple. Tout d'abord, nous avons besoin de PyOBJC, qui peut être installé à l'aide de pip install pyobjc. Cela installera l'intégralité de la liste des ponts API du système d'exploitation, permettant d'accéder à divers aspects de MacOS. Pour l'instant, nous envisagerons AppKit, un outil pour construire et contrôler les applications en cours d'exécution sur votre bureau Mac.

Nous pouvons utiliser AppKit pour répertorier toutes les applications en cours d'exécution:

<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>

Cela fournira une longue liste d'objets nsrunningApplication. Chaque objet correspond à une application spécifique en cours d'exécution sur le bureau. Beaucoup sont des applications «invisibles» (qui s'exécutent mais pas nécessairement des fenêtres), mais d'autres sont des applications que nous pourrions considérer comme des applications réelles, telles que Safari, Terminal, etc. NsrunningApplication a une documentation sur Developer.apple.com où ses propriétés peuvent être consultées. Par exemple, chaque application a un localizedName et un 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>

Nous pouvons également voir que l'objet NSRunningApplication a une fonction activate que nous pouvons appeler pour activer l'application, tout comme nous cliquerions sur l'icône dans le quai. Donc, pour trouver safari puis l'activer, nous utiliserons la fonction activate. L'appel à activate nécessite la valeur de options, comme indiqué dans la documentation, qui nécessite également l'importation d'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 est désormais activé.

Trouver la version python de l'API macOS

Trouver des noms Python correspondant aux noms Objective-C peut être un peu délicat. Comme le montre le code ci-dessus, la fonction activate de Objective-C est appelée activateWithOptions_ dans Python. Il existe un ensemble de règles pour cette conversion de nom, que la documentation PyOBJC explique, mais parfois il est plus rapide d'utiliser la propre fonction dir() de Python pour afficher toutes les propriétés d'un objet, puis sélectionner les propriétés qui semblent la plus raisonnable:

<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! Notre Safari (instance NsrunningApplication) a 452 propriétés! Eh bien, celui que nous voulons pourrait être appelé quelque chose comme "Activer", donc:

<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! Donc activateWithOptions_ est le nom de la fonction que nous devons appeler. De même, le nom de l'option que nous voulons transmettre à la fonction est dans AppKit lui-même:

<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>

Ce processus peut parfois se sentir un peu exploratoire, mais il peut également être fait à partir de Python que Objective-C peut tout faire.

Cet article est extrait de Practical Python et peut être acheté chez SitePoint Premium et les détaillants de livres électroniques.

FAQ sur l'utilisation de Python pour contrôler le macOS

Qu'est-ce que AppKit et comment l'utiliser dans Python pour contrôler les macOS?

AppKit est un framework du SDK macOS qui contient tous les objets nécessaires pour implémenter une interface utilisateur graphique basée sur des événements dans les applications MacOS. Il fournit une large gamme de classes et de fonctions pour créer et gérer les fenêtres des applications, traiter les entrées utilisateur, dessin graphiques et effectuer d'autres tâches liées à l'interface utilisateur. Dans Python, vous pouvez utiliser le pont PyOBJC pour accéder à AppKit et à d'autres cadres Objective-C. Cela vous permet d'écrire des scripts Python qui peuvent contrôler les applications MacOS, les fenêtres de l'opération et les interactions avec les services système.

Comment installer le module PyOBJC dans Python?

PyOBJC est un pont Python à Objective-C qui vous permet d'écrire des applications macOS entièrement traduites dans Python. Vous pouvez utiliser le Python Package Installer Pip pour l'installer. Ouvrez une fenêtre de terminal et saisissez la commande suivante: pip install pyobjc. Cela téléchargera et installera le module PyOBJC et ses dépendances. Une fois l'installation terminée, vous pouvez importer le module dans un script Python en utilisant import objc.

J'obtiens l'erreur "Aucun module nommé AppKit". que dois-je faire?

Cette erreur signifie généralement que le module AppKit n'est pas installé ou n'est pas trouvé dans votre environnement Python. Tout d'abord, assurez-vous que le module PYOBJC soit installé (qui comprend AppKit). Si vous avez installé PYOBJC mais obtenez toujours cette erreur, vous pouvez utiliser un environnement Python différent où PyOBJC n'est pas installé. Dans ce cas, vous devez installer PyOBJC dans le bon environnement Python ou passer à un environnement Python avec PyOBJC installé.

Comment contrôler les applications macOS à l'aide de Python?

À l'aide du pont PyOBJC, vous pouvez contrôler les applications MacOS à l'aide de Python en envoyant des commandes Applescript ou en utilisant des ponts de script. Par exemple, vous pouvez démarrer une application, utiliser une fenêtre, envoyer des frappes et effectuer d'autres tâches. Cela nécessite une bonne compréhension de Python et Applescript, ainsi que des interfaces de script de l'application.

Comment utiliser Python pour manipuler Windows dans MacOS?

Le framework AppKit fournit quelques classes pour gérer les fenêtres, telles que NSWindow et NSApplication. Vous pouvez utiliser ces classes pour obtenir une liste de toutes les fenêtres ouvertes, mettre la fenêtre à l'avant, redimensionner ou déplacer la fenêtre et effectuer d'autres tâches liées à la fenêtre. Cela nécessite d'accéder à la classe AppKit depuis Python à l'aide du pont Pyobjc.

Puis-je interagir avec les services système dans MacOS à l'aide de Python?

Oui, vous pouvez utiliser le pont Python et Pyobjc pour interagir avec divers services système dans MacOS. Par exemple, vous pouvez utiliser la classe NSWorkspace pour ouvrir une URL, lancer une application et effectuer d'autres tâches liées à l'espace de travail de l'utilisateur. Vous pouvez également utiliser la classe NSNotificationCenter pour publier et observer les notifications, ce qui permet à votre script de répondre aux événements système.

Comment envoyer des frappes à partir de scripts Python dans MacOS?

Vous pouvez utiliser la classe NSEvent de l'Appkit Framework pour créer et publier des événements de clavier, qui vous permet en fait d'envoyer des frappes à partir de scripts Python. Cela nécessite une bonne compréhension des types d'événements de classe et de clavier NSEvent, ainsi que le code de clé de la clé que vous souhaitez appuyer.

Puis-je dessiner des graphiques dans MacOS à l'aide de Python?

Oui, le framework AppKit fournit des classes pour des graphiques de dessin, tels que NSGraphicsContext, NSBezierPath et NSColor. Vous pouvez utiliser ces classes pour dessiner des lignes, des formes et des images, définir des couleurs de dessin et effectuer d'autres tâches de dessin. Cela nécessite d'accéder à la classe AppKit depuis Python à l'aide du pont Pyobjc.

Comment traiter la saisie des utilisateurs dans les scripts Python dans MacOS?

Le framework AppKit

fournit des classes pour le traitement des entrées des utilisateurs, telles que NSEvent et NSResponder. Vous pouvez utiliser ces classes pour obtenir des événements de souris, des événements de clavier et d'autres types d'entrée utilisateur. Cela nécessite d'accéder à la classe AppKit depuis Python à l'aide du pont Pyobjc.

Puis-je écrire une application macOS entièrement tractée dans Python?

Oui, avec le pontage PyOBJC, vous pouvez écrire des applications macOS entièrement traduites dans Python. Cela comprend la création d'une interface utilisateur graphique à l'aide de Windows, des boutons et d'autres contrôles, du traitement des entrées utilisateur, du dessin des graphiques et de l'interaction avec les services système. Cependant, cela nécessite une bonne compréhension du SDK Python et MacOS, ainsi que du framework AppKit et d'autres cadres Objective-C.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn