Run python script with ./
Hi all, I installed two python 2.7.3 into my home directory one is for Linux: /home/luban/*Linux*/Python/2.7.3 another is for Solaris: /home/luban/*SunOS*/Python/2.7.3 then I create a wrapper named "python" in /home/luban/bin to call the different python when I am working on different systems. [luban@lunbanworks 1] ~ > cat /home/luban/bin/python #!/bin/sh CMD=`basename $0` OS=`uname -s` CMD_PATH="/home/luban/$OS/Python/2.7.3/bin" if [ -x "${CMD_PATH}/${CMD}" ];then export PATH="${CMD_PATH}:${PATH}" exec ${CMD_PATH}/${CMD} ${1+"$@"} else echo "${CMD} is not available for ${OS}" 1>&2 exit 1 fi [luban@lunbanworks 2] ls -l /home/luban/bin/python -rwxrwxr-x 1 luban lunban 221 Apr 5 19:11 python* I use below script to test the wrapper /home/luban/bin/python [luban@lunbanworks 3]* ~ > *cat myscript.py #!/home/luban/bin/python myname="lunban" print "myname is %s" % myname [luban@lunbanworks 4]* *chmod +x myscript.py I want to use ./ run myscript.py [luban@lunbanworks 5] ~ >./myscript.py myname=luban: Command not found. lpr: Unable to access "myname" - No such file or directory use /home/luban/bin/python myscript.py can work:* *[luban@lunbanworks 5] ~ > */home/luban/bin/python myscript.py* myname is luban After I *change the shebang line to #!/home/luban/Linux/Python/2.7.3/bin/python, use ./ can execute the script. * [luban@lunbanworks 6] *~ >*cat myscript.py #!/home/luban/Linux/Python/2.7.3/bin/python myname="lunban" print "myname is %s" % myname [luban@lunbanworks 7] *~ >*./myscript.py myname is luban My question is: Why when I use #!/home/luban/Linux/Python/2.7.3/bin/python at the beginning of myscript.py, *./*myscript.py can work, but if I use the wrapper #!/home/luban/bin/python in my python script, use * ./* to run the script, it cannot not work? I had many scripts used #!/home/luban/bin/python when I only installed python under #!/home/luban/ for Linux, they can run with ./, I don't want to change them, so, how to let ./ run the python script If I want to *KEEP* wrapper #!/home/luban/bin/python as the shebang line? Best Regards, Luban -- http://mail.python.org/mailman/listinfo/python-list
Re: Run python script with ./
I have test that wrapper, under Bash 4.1.2, ./myscript.py works, it doesn't work under Bash 3.2.25, seems Bash relative. http://stackoverflow.com/questions/15838183/run-python-script-with-dot-slash On Fri, Apr 5, 2013 at 11:58 PM, Dylan Evans wrote: > > > > On Sat, Apr 6, 2013 at 1:04 AM, LubanWorks wrote: >> >> >> >> My question is: >> >> Why when I use #!/home/luban/Linux/Python/2.7.3/bin/python at the >> beginning of myscript.py, *./*myscript.py can work, >> >> but if I use the wrapper #!/home/luban/bin/python in my python script, use >> *./* to run the script, it cannot not work? >> > > Your shell will be trying to run your python script. The reason being that > when you do #!/bin/sh in the wrapper the shell tries to execute $0 which in > this case is the name of your python script. > > >> >> >> I had many scripts used #!/home/luban/bin/python when I only installed >> python under #!/home/luban/ for Linux, they can run with ./, I don't want >> to change them, >> >> so, how to let ./ run the python script If I want to *KEEP* wrapper >> #!/home/luban/bin/python as the shebang line? >> >> > Probably easier to use a symlink, or just use #!python and adjust your > $PATH. > > >> >> Best Regards, >> Luban >> >> -- >> http://mail.python.org/mailman/listinfo/python-list >> >> > > > -- > "The UNIX system has a command, nice ... in order to be nice to the other > users. Nobody ever uses it." - Andrew S. Tanenbaum > > -- > http://mail.python.org/mailman/listinfo/python-list > > -- http://mail.python.org/mailman/listinfo/python-list