I am very new to python as well as MAC OSX. For my academic project I need to download a bunch of tweets from twitter using twitter streaming API. I need to download atleast 5000000 tweets. So I have written a python script and placed it in start-up. "System Preference -> Users and Groups -> Login items" and added my script there. But I see that the script is not executed when I login to the system ! Please help me resolve this issue.
4 Answers
Adapt the following accordingly, name it something like myscript_launcher.plist, and put it in either one of three locations: /System/Library/LaunchAgents, /System/Library/LaunchDaemons, /Users/<username>/Library/LaunchAgents.
<?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.python.script.name</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/python</string>
<string>/path/to/python/script.py</string>
</array>
<key>StandardErrorPath</key>
<string>/var/log/python_script.error</string>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
Also, let's assume you put the plist file in ~/Library/LaunchAgents. You can start and stop it with the launchctl. To start, use launchctl load ~/Library/LaunchAgents/myscript_launcher.plist. To stop it, do the same but use the unload argument
4 Comments
launchctl rather than initctl. Again, it may have been initctl pre Yosemite, but if that fails then use launchctl./System directories are no longer an option. Best to use ~/Library/LaunchAgents or /Library/LaunchAgents. Still working for me on 10.15.6.You need to create a shell file that launches your python code. Tell the shell script to start at log in.
example
#!/bin/bash
python username/Desktop/startupscripts/file.py
save the file with the .sh extension.
add the .sh file to "System Preference -> Users and Groups -> Login items", the .sh script will call the python file.
This is what you should have in the shell file. I'm assume this is the path to the file, if it isn't modify it.
#!/bin/bash
python /Users/username/moviebuzz-api/flask/bin/streaming_movies.py
nothing else.
14 Comments
But I see that the script is not executed when I login to the system !
The problem is:
.pyfiles are usually opened by some text editor by default.The solution is: In order to execute the script as
Login Items, you need to make the script to be opened byTerminal.app(or anything that can executes the script) by default.
After that, you can set the script as Login Items in the way you posted.
How to set Terminal.app as default:
- Put a
#!line on the top of the script:
#!/usr/bin/env python3
print("hello world")
- Add execute permission to the script:
chmod u+x script.py
- Change the file extension
.pyto.command(to associate the file withTerminal.app):
mv script.py script.command
At this point, you should be able to run the script by double clicking on Finder.
If you can not, try the following:
- Right click on the script file on Finder.
- Select
Get Info - Click the dropdown of
Open with:option. - Select
Terminal.app
By the way, the above applies to not only python, but other scripts such as bash.
For example of bash, change !# like so:
#!/usr/bin/env bash
Comments
Here's the full solution I am using on Mojave:
Plist: ~/Library/LaunchAgents/play.with.mpv.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>Disabled</key>
<false/>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/Users/e/Library/Python/3.7/bin:/usr/local/bin</string>
</dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>play.with.mpv</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/python3</string>
<string>/Users/e/Library/Python/3.7/bin/play-with-mpv</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/tmp/play.with.mpv.stderr</string>
<key>StandardOutPath</key>
<string>/tmp/play.with.mpv.stdout</string>
</dict>
</plist>
Mind the PATH to python3 - find it with which python3 and the play-with-mpv python script!
Load plist:
launchctl load ~/Library/LaunchAgents/play.with.mpv.plist
If your video is dropping frames as hell, create mpv config in ~/.config/mpv/mpv.conf and put there this:
video-sync=display-resample
if that do doesn't help, try this instead
opengl-early-flush=no