Right now I am leaning towards using exec to start a new process, but
I thought I would check to see if anyone else has had the need to
perform a task similar to this one.
AHA
/usr/local/bin/$APPNAME:
#!/bin/sh
INSTALLPATH=<wherever app is installed>
PATH=$INSTALLPATH/bin:$PATH
exec $INSTALLPATH/bin/python $APPNAME "$@"
Doesn't get much simpler than that. :) You can certainly do the
equivalent in Python... there's not much difference. Slightly less
typing in bourne/bash shell, I guess...
--
Derek D. Martin
http://www.pizzashack.org/
GPG Key ID: 0x81CFE75D
As an alternative, you may be able to use the subprocess module of
Python to do this too.
Mike
>AHA
Simplest case:
>>> import os
>>> os.system("/path/to/your/python app.py")
Obviously things can be shortened by adding to the PATH.
Ivan Ven Osdel
Software Engineer
http://datasyncsuite.com
You didn't tell us what operating system, but if by chance it is Windows you
should use py2exe to package up your program (along with the proper
pythonXX.dll) into a distributable package.
On Linux, others have posted answers.
-Larry
*Provides*, no... neither does it provide Python, for what that's
worth. But you can certainly get it (bash):
http://win-bash.sourceforge.net/
I suppose it's not worth installing just for this purpose though...
But you can provide with your application a DoS batch file that does
exactly the same thing (in addition to a shell script). The user
would quite intuitively use whichever were appropriate, or follow your
provided directions otherwise. Or, the equivalent in (hopefully
OS-agnostic) Python:
import os, sys
# I believe this gets the name of the root in all major OSes
def root_dir(path):
if os.path.dirname(path) == path:
return path
return (root_dir(os.path.dirname(path)))
appname = <name of your python script>
root = root_dir(os.getcwd())
install_path = os.path.join(root, "usr")
bin_path = os.path.join(install_path, "bin")
os.environ["PATH"] = bin_path + os.pathsep + os.environ["PATH"]
python_path = os.path.join(bin_path, "python")
args = sys.argv[1:]
args.insert(0, os.path.join(bin_path, appname))
args.insert(0, python_path)
args.insert(0, python_path)
os.execv(python_path, args)
>> You've hit the proverbial nail with the hammer. The problem is that my
>> application needs to run under both the Linux and Windows OSs, so while
>> I
>> would love to use a nice sh, csh, or bash shell script. My hands are
>> tied
>> because Windows does not provide such wonderful shells.
>
> *Provides*, no... neither does it provide Python, for what that's
> worth. But you can certainly get it (bash):
>
> http://win-bash.sourceforge.net/
Using the standard cmd.exe, the previously posted shell script becomes:
=== begin appname.cmd ===
set INSTALLPATH=<wherever app is installed>
call %INSTALLPATH%\bin\python %INSTALLPATH%\APPNAME.py %*
=== end appname.cmd ===
--
Gabriel Genellina