Run python script with dot slash ./ -
i installed 2 python 2.7.3 home directory
1 linux: /home/luban/linux/python/2.7.3 solaris: /home/luban/sunos/python/2.7.3 then create wrapper named "python" in /home/luban/bin call different python when 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} not available ${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 test wrapper /home/luban/bin/python
[luban@lunbanworks 3] ~ > cat myscript.py #!/home/luban/bin/python myname="lunban" print "myname %s" % myname [luban@lunbanworks 4] chmod +x myscript.py i want use ./ run myscript.py
[luban@lunbanworks 5] ~ >./myscript.py myname=luban: command not found. lpr: unable 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 luban after change shebang line #!/home/luban/linux/python/2.7.3/bin/python, use ./ can execute script.
[luban@lunbanworks 6] ~ >cat myscript.py #!/home/luban/linux/python/2.7.3/bin/python myname="lunban" print "myname %s" % myname [luban@lunbanworks 7] ~ >./myscript.py myname luban why when use #!/home/luban/linux/python/2.7.3/bin/python @ beginning of myscript.py, ./myscript.py can work,
but if use wrapper #!/home/luban/bin/python in python script, use ./ run script, cannot not work?
i had many scripts used #!/home/luban/bin/python when installed python under #!/home/luban/ linux, can run ./, don't want change them,
so, how let ./ run python script if want keep wrapper #!/home/luban/bin/python shebang line?
deit:
./myscript.py can not work wrapper #!/home/luban/bin/python under centos 5.4, bash 3.2.25
today, have test under centos 6.4, bash 4.1.2:
i added
echo '$0 =' $0 echo '${command_path}/${command} ${1+"$@"} =' ${command_path}/${command} ${1+"$@"} into wrapper #!/home/luban/bin/python track.
./myscript.py works wrapper #!/home/luban/bin/python
[luban@lunbanworks 20] ./myscript.py $0 = /home/luban/bin/python ${command_path}/${command} ${1+"$@"} = /home/luban/linux/python/2.7.3/bin/python ./myscript.py myname luban so suppose may bash 3.2.25 bug ./ when use wrapper #!/home/luban/bin/python?
have considered:
#!/usr/bin/env python that works me, long python found in search path.
in case, want profile have following in profile setup:
# adjust preferred shell export path=/home/luban/linux/python/2.7.3:/home/luban/sunos/python/2.7.3:$path then, when python script runs "#!/usr/bin/env python" shebang, find right python you.
Comments
Post a Comment