Cannot pass an argument to python with "#!/usr/bin/env python"

Eskil picture Eskil · Jul 22, 2010 · Viewed 23.2k times · Source

I needed to have a directly executable python script, so i started the file with #!/usr/bin/env python. However, I also need unbuffered output, so i tried #!/usr/bin/env python -u, but that fails with python -u: no such file or directory.

I found out that #/usr/bin/python -u works, but I need it to get the python in PATH to support virtual env environments.

What are my options?

Answer

Ade YU picture Ade YU · Jan 29, 2012

In some environment, env doesn't split arguments. So your env is looking for python -u in your path. We can use sh to work around. Replace your shebang with the following code lines and everything will be fine.

#!/bin/sh
''''exec python -u -- "$0" ${1+"$@"} # '''
# vi: syntax=python

p.s. we need not worry about the path to sh, right?