Python subprocess.call a bash alias
bash, python, subprocess
Solution
Update: Thanks for the upvotes for this hack to workaround the problem, I'm glad it's useful. But a much better answer is tripleee's.
If the alias you require is defined in ~/.bashrc, then it won't get run for a few reasons:
You must give the `shell` keyword arg:
subprocess.call('command', shell=True)
Otherwise your given command is used to find an executable file, rather than passed to a shell, and it is the shell which expands things like aliases and functions.
By default, `subprocess.call` and friends use the `/bin/sh` shell. If this is a Bash alias you want to invoke, you'll need to tell subprocess to use bash instead of sh, using the `executable` keyword arg:
subprocess.call('command', shell=True, executable='/bin/bash')
However, /bin/bash will not source ~/.bashrc unless started as an 'interactive' shell (with `-i`.) Unfortunately, you can't pass `executable='/bin/bash -i'`, as it thinks the whole value is the name of an executable. So if your alias is defined in the user's normal interactive startup, e.g. in .bashrc, then you'll have to invoke the command using this alternative form:
subprocess.call(['/bin/bash', '-i', '-c', command])
# i.e. shell=False (the default)
Problem
At work there's a script that lists completed tasks. This was written by someone else and is hosted over the network. I have an alias in my .bashrc that calls this script, with its many flags and such, and I wanted to write a python script that would call this alias every few minutes so I can have a shell open with updated stats. However, `subprocess.call("myAlias")` fails. I'm still fairly new to python, and am struggling to figure this out. ``` from subprocess import call def callAlias(): call("myAlias") callAlias() ``` I plan on adding more too it, but I hit the snag on my first step. :P I would post more, but there's a lot of sensitive confidential stuff I have to be careful with. Sorry for the vague code, and lack of error output.