By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,898 Members | 1,245 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,898 IT Pros & Developers. It's quick & easy.

Adapting code to multiple platforms

P: n/a
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

Jul 18 '05 #1
Share this Question
Share on Google+
5 Replies


P: n/a
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.
Jul 18 '05 #2

P: n/a
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 ;-)

Jul 18 '05 #3

P: n/a
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
Jul 18 '05 #4

P: n/a
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
Jul 18 '05 #5

P: n/a
Paul Watson wrote:
"Peter Hansen" <pe***@engcorp.com> 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!
Jul 18 '05 #6

This discussion thread is closed

Replies have been disabled for this discussion.