Adapting code to multiple platforms

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Jeffrey Barish

    #1

    Adapting code to multiple platforms

    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_subclas s(super):
    def func(self):
    '''windows-specific function defined here'''

    And then in main I have:

    inst = eval('%s_subcla ss' % sys.platform)(a rgs)

    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

  • Jeremy Bowers

    #2
    Re: Adapting code to multiple platforms

    On Fri, 11 Mar 2005 17:27:06 -0700, Jeffrey Barish wrote:[color=blue]
    > 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.[/color]

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



    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.

    Comment

    • Simon John

      #3
      Re: Adapting code to multiple platforms

      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.platfo rm()
      , sys.platform and os.name

      You could try import win32api and checking for an exception ;-)

      Comment

      • Peter Hansen

        #4
        Re: Adapting code to multiple platforms

        Simon John wrote:[color=blue]
        > 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.platfo rm()
        > , sys.platform and os.name
        >
        > You could try import win32api and checking for an exception ;-)[/color]

        (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

        Comment

        • Patrick Useldinger

          #5
          Re: Adapting code to multiple platforms

          Jeffrey Barish wrote:
          [color=blue]
          > 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.
          >[/color]

          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(fi lename)

          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

          Comment

          • Peter Hansen

            #6
            Re: Adapting code to multiple platforms

            Paul Watson wrote:[color=blue]
            > "Peter Hansen" <peter@engcorp. com> wrote:[color=green]
            >>Simon John wrote:[color=darkred]
            >>>You could try import win32api and checking for an exception ;-)[/color]
            >>
            >>(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.[/color]
            >
            > How about try: import msvcrt[/color]

            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!

            Comment

            Working...