Skip to main content

pythonic interface for macOS launchd

Project description

https://img.shields.io/pypi/v/launchd.svg https://github.com/infothrill/python-launchd/actions/workflows/tests.yml/badge.svg?branch=main

launchd is a pythonic interface to interact with macOS’s launchd. It provides access to basic querying and interaction with launchd. It is implemented using the Objective C ServiceManagement framework as well as the launchd command line utility. Therefore, this python package can only be used on macOS

The python objective C bridge contains some special types. This package strips off all non built-in type information and returns pure python data.

Examples

The relevant import statement is:

import launchd

Listing all launchd jobs:

for job in launchd.jobs():
    print(job.label, job.pid, job.laststatus, job.properties, job.plistfilename)

Find the pid and laststatus of a job:

>>> launchd.LaunchdJob("com.apple.Finder").pid
278

>>> launchd.LaunchdJob("com.apple.Finder").laststatus
0

>>> launchd.LaunchdJob("com.example.fubar").pid
Traceback (most recent call last):
  File "launchd/launchctl.py", line 78, in refresh
    raise ValueError("job '%s' does not exist" % self.label)
ValueError: job 'com.example.fubar' does not exist

Detect if a job exists:

>>> launchd.LaunchdJob("com.example.fubar").exists()
False

launchd job properties (these come directly from launchd and NOT the .plist files):

>>> launchd.LaunchdJob("com.apple.Finder").properties
{'OnDemand': 1, 'PID': 278, 'PerJobMachServices': {'com.apple.coredrag': 0,
'com.apple.axserver': 0, 'com.apple.CFPasteboardClient': 0,
'com.apple.tsm.portname': 0}, 'LimitLoadToSessionType': 'Aqua',
'Program': '/System/Library/CoreServices/Finder.app/Contents/MacOS/Finder',
'TimeOut': 30, 'LastExitStatus': 0, 'Label': 'com.apple.Finder',
'MachServices': {'com.apple.finder.ServiceProvider': 10}}

>>> launchd.LaunchdJob("com.apple.Finder").properties["OnDemand"]
1

Find all plist filenames of currently running jobs:

for job in launchd.jobs():
   if job.pid is None or job.plistfilename is None:
      continue
   print(job.plistfilename)

Job properties of a given job (this uses the actual .plist file):

>>> launchd.plist.read("com.apple.kextd")
{'ProgramArguments': ['/usr/libexec/kextd'], 'KeepAlive': {'SuccessfulExit': False},
'POSIXSpawnType': 'Interactive', 'MachServices': {'com.apple.KernelExtensionServer':
{'HostSpecialPort': 15}}, 'Label': 'com.apple.kextd'}

Installation

$ pip install launchd

or, if you want to work using the source tarball:

$ python setup.py install

Requirements

  • OS X >= 10.6

  • Python 3.4+

Release history

0.3.0 (June 2021)

  • changed: create directory hierarchy for plist file if not present. issue #6

  • improved: added automated flake8 tests, check-manifest and safety checks

  • changed: moved basic CI to GitHub actions

0.2.0 (March 2021)

  • drop python 2.x, 3.2, 3.3 support

  • fix plistlib calls (issue #4)

0.1.2 (September 2020)

  • added tox.ini for easier testing accross interpreter versions

  • added travis test setup

  • fixed incompatibility with launchctl in test code

  • fixed a typo in the README

0.1.1 (November 2013)

  • Fixed a bug in launchd.plist.read() when no scope was specified

0.1 (November 2013)

  • Focus: initial public release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

launchd-0.3.0.tar.gz (9.3 kB view details)

Uploaded Source

Built Distribution

launchd-0.3.0-py3-none-any.whl (10.3 kB view details)

Uploaded Python 3

File details

Details for the file launchd-0.3.0.tar.gz.

File metadata

  • Download URL: launchd-0.3.0.tar.gz
  • Upload date:
  • Size: 9.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.7.8

File hashes

Hashes for launchd-0.3.0.tar.gz
Algorithm Hash digest
SHA256 e41c4e52a7573e25ae0dfd716ee954b010f9f08918d616b7633f729cd114ca99
MD5 61fe3fa61cfe83d701a2c26c9b3ea505
BLAKE2b-256 3d7b403c1d131aed62973512f343a84103cf4beb938d343ae54435e84f326350

See more details on using hashes here.

File details

Details for the file launchd-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: launchd-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 10.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.7.8

File hashes

Hashes for launchd-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 16d0275cd193be9edca4aea7182f3075dacfc7d27c681d30c07b34e19044bbfe
MD5 4fc733f60f267e1aa72c28ddd3624e33
BLAKE2b-256 bb373cb1a6585fc657464e56b531f5f6c49e466db5897eedceb475668b341608

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page