Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
437 views
in Technique[技术] by (71.8m points)

osx mountain lion - Running Python Script with Launchd: imports not found

I've been trying to set up a script to run a python program at regular intervals using launchd. The python program fails because it can't find my imports---I know this because I caught the errors in a log file. To fix this problem, I created ~.MacOSXenvironment.plist, and duplicated my PYTHONPATH there, logged out and logged in again. This seems to be insufficient to solve the problem, and I'm at a loss as to what else to try.

I'm running OSX, 10.8.3.

Related threads:

UPDATE:

It appears that I can run the following command:

launchctl setenv PYTHONPATH $PYTHONPATH

and the script will execute successfully. So, to modify my question:

  1. Where does this get stored? I checked ~.launchd.conf and etc.launchd.conf, neither existed.
  2. Presumably this setting is dumped when I reboot. Where can I change this information so that launchd will find it?
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

To set the environment of a specific job you should use the EnvironmentVariables key in the job definition itself:

<?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>com.example.app</string>
    <key>Program</key>
    <string>/path/to/your/script</string>
    <key>EnvironmentVariables</key>
    <dict>
        <key>PYTHONPATH</key>
        <string>/your/python/path</string>
    </dict>
</dict>
</plist>

You may define default environment variables for launchd(8) services by editing /etc/launchd.conf for daemons or /etc/launchd-user.conf for agents. The latter one works but is not documented. The currently documented (but unsupported) per-user config file is $HOME/.launchd.conf.

These config files contain a list of launchctl(1) subcommands. The one you want is:

setenv PYTHONPATH /your/python/path

Update: /etc/launchd.conf is not supported in Mac OS X 10.10 and higher. On these systems you'll have to define environment variables on a per-job-basis.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...