Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Adapting code to multiple platforms

Reply
Thread Tools

Adapting code to multiple platforms

 
 
Jeffrey Barish
Guest
Posts: n/a
 
      03-12-2005
I have a small program that I would like to run on multiple platforms
(at least linux and windows). My program calls helper programs that
are different depending on the platform. I think I figured out a way
to structure my program, but I'm wondering whether my solution is good
Python programming practice.

Most of my program lives in a class. My plan is to have a superclass
that performs the generic functions and subclasses to define methods
specific to each platform. I envision something like this:

class super:
'''All the generic stuff goes here'''

class linux_subclass(super):
def func(self):
'''linux-specific function defined here'''

class windows_subclass(super):
def func(self):
'''windows-specific function defined here'''

And then in main I have:

inst = eval('%s_subclass' % sys.platform)(args)

to create an instance of the appropriate subclass.

I realize that I will have to name the subclasses appropriately
depending on what values get assigned to sys.platform. (On my platform,
sys.platform is 'linux2', so I would actually need class
linux2_subclass(super). I don't know what value gets assigned on a
windows platform.)

The other way I thought of -- surrounding all the platform-specific code
with if statements to test sys.platform -- seems clearly worse. I'm
just getting up to speed on Python and OOP, so I'm wondering whether I
have missed something obvious. I'm hoping that the strongest rebuke
would be that I found something obvious.
--
Jeffrey Barish

 
Reply With Quote
 
 
 
 
Jeremy Bowers
Guest
Posts: n/a
 
      03-12-2005
On Fri, 11 Mar 2005 17:27:06 -0700, Jeffrey Barish wrote:
> Most of my program lives in a class. My plan is to have a superclass
> that performs the generic functions and subclasses to define methods
> specific to each platform....
> I'm just getting up to speed on Python and OOP, so I'm wondering whether I
> have missed something obvious. I'm hoping that the strongest rebuke
> would be that I found something obvious.


You may be interested to know this is called the Template Pattern.

http://home.earthlink.net/~huston2/d...ateMethod.html

Generally, while most of the patterns are obvious in hindsight they are
not necessarily obvious in advance, and I consider independently
re-discovering a pattern is a good sign; it's much easier to correct not
knowing about them than gaining the skills to independently re-derive them.
 
Reply With Quote
 
 
 
 
Simon John
Guest
Posts: n/a
 
      03-12-2005
If you're using a GUI, then that may help you decode the platform too -
for example wxPython has wx.Platform, there's also platform.platform()
, sys.platform and os.name

You could try import win32api and checking for an exception

 
Reply With Quote
 
Peter Hansen
Guest
Posts: n/a
 
      03-12-2005
Simon John wrote:
> If you're using a GUI, then that may help you decode the platform too -
> for example wxPython has wx.Platform, there's also platform.platform()
> , sys.platform and os.name
>
> You could try import win32api and checking for an exception


(Winky noted) Just in case anyone thinks that last is a
useful idea, keep in mind that win32api is not installed
(with the standard distribution) but must be installed
with a separate download of the pywin32 package by Mark
Hammond.

-Peter
 
Reply With Quote
 
Patrick Useldinger
Guest
Posts: n/a
 
      03-12-2005
Jeffrey Barish wrote:

> I have a small program that I would like to run on multiple platforms
> (at least linux and windows). My program calls helper programs that
> are different depending on the platform. I think I figured out a way
> to structure my program, but I'm wondering whether my solution is good
> Python programming practice.
>


I use something like this in the setup code:

if os.name == 'posix':
statfunction = os.lstat
else:
statfunction = os.stat

and then further in the code:

x = statfunction(filename)

So the idea is to have your "own" function names and assign the
os-specific functions one and for all in the beginning. Afterwards, your
code only uses your own function names and, as long as they behave in
the same way, there's no more if - else stuff.

-pu
 
Reply With Quote
 
Paul Watson
Guest
Posts: n/a
 
      03-13-2005
"Peter Hansen" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> Simon John wrote:
>> If you're using a GUI, then that may help you decode the platform too -
>> for example wxPython has wx.Platform, there's also platform.platform()
>> , sys.platform and os.name
>>
>> You could try import win32api and checking for an exception

>
> (Winky noted) Just in case anyone thinks that last is a
> useful idea, keep in mind that win32api is not installed
> (with the standard distribution) but must be installed
> with a separate download of the pywin32 package by Mark
> Hammond.
>
> -Peter


How about try: import msvcrt


 
Reply With Quote
 
Peter Hansen
Guest
Posts: n/a
 
      03-14-2005
Paul Watson wrote:
> "Peter Hansen" <(E-Mail Removed)> wrote:
>>Simon John wrote:
>>>You could try import win32api and checking for an exception

>>
>>(Winky noted) Just in case anyone thinks that last is a
>>useful idea, keep in mind that win32api is not installed
>>(with the standard distribution) but must be installed
>>with a separate download of the pywin32 package by Mark
>>Hammond.

>
> How about try: import msvcrt


Sure, that works, but it would make for pretty
inscrutable code if you were doing this just to
check whether you were on Windows, and not because
you really intended to use the msvcrt module.

sys.platform exists for a good reason. Use it!
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Adapting software to multiple usage patterns jacob navia C Programming 90 10-25-2009 04:34 PM
A service for testing Python code on multiple platforms and versions David Moss Python 3 09-13-2008 02:03 PM
Looking for Rake C code building examples with multiple platforms,versions... Stuart Hungerford Ruby 0 03-14-2006 12:12 AM
adapting code ross Javascript 4 01-25-2006 01:24 AM
Adapting onBlur functionality of javascript in ASP.net?? Jeffrey ASP .Net 2 10-16-2003 06:48 AM



Advertisments