Launching an independent Python program in a cross-platform way (including mac)

Prateek surekap at gmail.com
Sun Apr 29 19:51:35 EDT 2007


On Apr 30, 4:32 am, André <andre.robe... at gmail.com> wrote:
> I would like to find out how I can launch an independent Python
> program from existing one in a cross-platform way.  The result I am
> after is that a new terminal window should open (for io independent of
> the original script).
>
> The following seems to work correctly under Ubuntu and Windows ... but
> I haven't been able to find a way to make it work under Mac OS.
>
> def exec_external(code, path):
>     """execute code in an external process
>     currently works under:
>         * Windows NT (tested)
>         * GNOME (tested)  [January 2nd and 15th change untested]
>     This also needs to be implemented for OS X, KDE
>     and some form of linux fallback (xterm?)
>     """
>     if os.name == 'nt':
>         current_dir = os.getcwd()
>         target_dir, fname = os.path.split(path)
>
>     filename = open(path, 'w')
>     filename.write(code)
>     filename.close()
>
>     if os.name == 'nt':
>         os.chdir(target_dir) # change dir so as to deal with paths
> that
>                              # include spaces
>         Popen(["cmd.exe", ('/c start python %s'%fname)])
>         os.chdir(current_dir)
>     elif os.name == 'posix':
>         try:
>             os.spawnlp(os.P_NOWAIT, 'gnome-terminal', 'gnome-
> terminal',
>                                 '-x', 'python', '%s'%path)
>         except:
>             raise NotImplementedError
>     else:
>         raise NotImplementedError
> ==========================
> Any help would be greatly appreciated.
>
> André

Well,

You need to check sys.platform on the Mac instead of os.name.
os.name returns 'posix' on all *nix based systems. sys.platform
helpfully returns "darwin" on the Mac.

Not sure how to start Terminal. Here's what I got when I tried it:

>>> if sys.platform == "darwin": os.spawnlp(os.P_NOWAIT, '/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal')
9460
>>> 2007-04-30 05:19:59.255 [9460] No Info.plist file in application bundle or no NSPrincipalClass in the Info.plist file, exiting

Maybe I'm just calling it wrong and you'll have more luck.

Prateek




More information about the Python-list mailing list