Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Using Python To Launch Python

66 views
Skip to first unread message

aha

unread,
Jul 14, 2008, 5:01:04 PM7/14/08
to
Hello All,
I have a situation where I can count on a Python installation being
available on a system, but I can't count on it being a version of
Python needed by my application. Since my application has it's own
version of Python installed with it how should I use the system Python
to launch the version of Python that launches my Application. Yes,
this is a convoluted process, but not all Pythons are built the
same :)

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

Derek Martin

unread,
Jul 14, 2008, 5:24:54 PM7/14/08
to aha, pytho...@python.org
On Mon, Jul 14, 2008 at 02:01:04PM -0700, aha wrote:
> Since my application has it's own version of Python installed with
> it how should I use the system Python to launch the version of
> Python that launches my Application. Yes, this is a convoluted
> process, but not all Pythons are built the same :)

/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

Mike Driscoll

unread,
Jul 14, 2008, 5:32:14 PM7/14/08
to

As an alternative, you may be able to use the subprocess module of
Python to do this too.

Mike

Ivan Ven Osdel

unread,
Jul 14, 2008, 5:48:55 PM7/14/08
to pytho...@python.org
>Hello All,
> I have a situation where I can count on a Python installation being
>available on a system, but I can't count on it being a version of
>Python needed by my application. Since my application has it's own
>version of Python installed with it how should I use the system Python
>to launch the version of Python that launches my Application. Yes,
>this is a convoluted process, but not all Pythons are built the
>same :)
>
>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

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

Larry Bates

unread,
Jul 14, 2008, 6:27:50 PM7/14/08
to

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

Derek Martin

unread,
Jul 14, 2008, 8:39:20 PM7/14/08
to Aquil H. Abdullah, pytho...@python.org
On Mon, Jul 14, 2008 at 05:40:43PM -0400, Aquil H. Abdullah wrote:
> 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/

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)

Gabriel Genellina

unread,
Jul 15, 2008, 4:28:12 AM7/15/08
to pytho...@python.org
En Mon, 14 Jul 2008 21:39:20 -0300, Derek Martin <co...@pizzashack.org>
escribió:

> On Mon, Jul 14, 2008 at 05:40:43PM -0400, Aquil H. Abdullah wrote:

>> 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

0 new messages