elsa in mac

macOS에서 python 코드를 로그인 시 자동으로 실행하도록 하는 방법 본문

Mac(OS X)/개발(Dev)

macOS에서 python 코드를 로그인 시 자동으로 실행하도록 하는 방법

elsa in mac 2023. 10. 6. 22:58

macOS에서는 사용자 로그인 시, 자동으로 실행될 앱을 지정할 수 있습니다. 

기본적으로는 앱을 설치할때, 해당 앱이 로그인 자동 실행 기능이 있고, 사용자가 설정에서 해당 기능을 활성화 시키면 자동으로 "로그인 항목"에 추가가 됩니다. 

python 코드도 이 로그인 항목에 넣을 수 있습니다 만, App이 아닌 text기반의 Source Code 이기 때문에 꼼수를 좀 부려서 넣어 주어야 합니다. 다만 이번 포스트에서 해당 꼼수를 설명하지 않는 이유는, 로그인 시 터미널이 자동 실행되면서 해당  pyhthon 코드를 실행하게 되기 때문입니다. 깔끔하지 못한 방법이라고나 할까...

자 그래서, 방법은 Lauch Daemon용 plist 파일을 만들고, 이 파일을 load 해 주는 보다 정석적인 방법을 설명하고자 합니다. 참고로 이 방법을 사용하면, 위의 로그인 항목에서는 나타나지 않습니다. ^^

우선, 실행할 python 파일을 /usr/local/bin  위치로 복사해 넣습니다. 예를 들어 test.py 라고 하죠.

다음은 이번 포스트 의 핵심인 plist를 만들 차례 입니다. 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>my.inputsource.switcher</string>
	<key>RunAtLoad</key>
	<true/>	
	<key>ProgramArguments</key>
	<array>
		<string>/opt/homebrew/bin/python3</string>
		<string>/usr/local/bin/test.py</string>
	</array>
	<key>StandardOutputPath</key>
	<string>/Users/elsa/Documents/stdout</string>
	<key>StandardErrorPath</key>
	<string>/Users/elsa/Documents/stderr</string>
</dict>
</plist>

my.inputsource.switcher.plist.zip
0.00MB

우선, Label은 Launch Agent의 이름으로. 사용자가 임의로 정하면 되는데, 이름은 그대로 이 파일의 파일명이 되도록 일치시킵니다.  위의 예를 보면, my.inputsoruce.switcher 이고, 이 파일명은 my.inputsource.switcher.plist 가 됩니다.  절대적인 것은 아니지만 효율적인 관리 측면에서 대부분 이름을 일치 시킵니다.

다음 항목인 RunAtLoad는 로그인 시, 실행을 시키겠다는 의미가 됩니다. 

ProgramArguments에는 두 개의 서브 항목이 들어가는데, 첫번째는 python의 위치, 두 번째는 실행할 python 코드의 파일 위치를 명시해 줍니다. 

python의 위치는 터미널에서 아래와 같이 witch python 혹은 python3 라고 명령하면 알려 줍니다. 

다음 StandardOutputPathStandardErrorPath는 역시 사용자가 임의로 정하는 부분으로 각각 실행할 python code의 output 파일과 error가 발생했을 시, error log를 저장할 파일위치와 파일명을 정의해 주면 됩니다. 

이것을 정의해 주지 않으면, python 코드의 기능에 따라 정상적으로 load가 되지 않을 수 있으니, 꼭 넣어 주어야 합니다. 

마지막으로, 해당 plist 파일이 저장될 위치는 ~/Library/LaunchAgents 폴더 입니다. 

이제, 해당 plist파일을 터미널에서 Launchctrl 명령으로 load를 해 주면 됩니다. 

특별한 메시지가 보이지 않는다면 정상적으로 잘 로드가 된 것입니다. 

만일, 더 이상 필요가 없어서 로그인 시 자동 실행이 되지 않게 되돌리고 싶다면, plist 파일을 ~/Library/LaunchAgents 폴더에서 제거하면 됩니다. 

'Mac(OS X) > 개발(Dev)' 카테고리의 다른 글

유용한 Xcode Extensions(확장 프로그램) 모음..  (0) 2017.05.19
공유하기 링크
Comments