smarg19 Posted July 28, 2014 Share Posted July 28, 2014 Ok, I'm not 100% clear on exactly what the problem is, so I'm going to attempt to describe what happens in a number of related scenarios. Hopefully this will suffice. In short, I am having a problem when I try to run a CLI-based program (pandoc) from a Python script which is told to run in a Run Script action. Here's the long version: I have a workflow that calls to a Python script (pandoctor.py) which itself uses the subprocess module to call the pandoc CLI. pandoc (in this instance) is using a dependency (xelatex). Whenever I use the Run Script action, I get the error from pandoc that "pandoc: xelatex not found. xelatex is needed for pdf output." To me, this suggests that the Alfred call to run pandoctor.py runs well the pandoctor.py call to run pandoc runs well but, pandoc's call to xelatex is broken Now, I believe that this issue revolves around how PATH is handled and passed between script because this same code will work if I just run the pandoctor.py script itself (with the appropriate arguments) and if I open Terminal and run the code that I have in the Run Script action (e.g. `python pandoctory.py run "{query}" (tho of course in Terminal I manually input the query)). I am assuming that Alfred has a somewhat different environment than the Terminal, with a different PATH, and this is why pandoc cannot find xelatex. So, I have questions: is there a difference in Terminal and Alfred's Run Script environment? if so, what exactly is it? how can I fix my workflow to work properly within Alfred's environment? NOTE: I am on the latest build of Alfred (2.3 264) Link to comment
deanishe Posted July 28, 2014 Share Posted July 28, 2014 (edited) This is not specific to Stephen's issue, but applies generally. Alfred (and all OS X apps) completely ignore your shell setup scripts (.bashrc etc.), and therefore environment. All apps are called with launchd's environment (the same applies to LaunchAgents). If you want to call an executable that isn't in /bin or /usr/bin, you should specify the full path (e.g. /usr/local/bin/program). If the executable you call in turn calls something that isn't on launchd's barebone PATH, you need to update PATH before calling it, e.g. (bash): export PATH=$PATH:/usr/local/bin program arg1 arg2 A consequence of this is that if you call a Python/Ruby/etc. script via bash in Alfred, you should always specify the full path to the interpreter, e.g.: /usr/bin/python myscript.py or /usr/bin/ruby myscript.rb. If you don't do this, and you have a custom version of Python/Ruby in /usr/local/bin, it's possible that your script will work from Terminal, but not from Alfred, because they're using different Python/Ruby installations, which may behave differently or have different libraries installed. Edited July 29, 2014 by deanishe Link to comment
smarg19 Posted July 29, 2014 Author Share Posted July 29, 2014 This is all helpful information. Clearly not a bug per se but knowledge that could easily be of use to others. Thank you Dean for the answer. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now