tags:

views:

682

answers:

4

I found the platform module but it says it returns 'Windows' and it's returning 'Microsoft' on my machine. I notice in another thread here on stackoverflow it returns 'Vista' sometimes.

So, the question is, how do implemement?

if isWindows():
  ...

In a forward compatible way? If I have to check for things like 'Vista' then it will break when the next version of windows comes out.

+7  A: 

Python os module

Specifically

os.name The name of the operating system dependent module imported. The following names have currently been registered: 'posix', 'nt', 'mac', 'os2', 'ce', 'java', 'riscos'.

Martin Beckett
+3  A: 

You should be able to rely on os.name.

import os
if os.name == 'nt':
    # ...
Eevee
+3  A: 

in sys too:

import sys
# its win32, maybe there is win64 too?
is_winows = sys.platform.startswith('win')
THC4k
+10  A: 

Are you using platform.system?

 system()
        Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'.

        An empty string is returned if the value cannot be determined.

If that isn't working, maybe try platform.win32_ver and if it doesn't raise an exception, you're on Windows; but I don't know if that's forward compatible to 64-bit, since it has 32 in the name.

win32_ver(release='', version='', csd='', ptype='')
        Get additional version information from the Windows Registry
        and return a tuple (version,csd,ptype) referring to version
        number, CSD level and OS type (multi/single
        processor).

But os.name is probably the way to go, as others have mentioned.


For what it's worth, here's a few of the ways they check for Windows in platform.py:

if sys.platform == 'win32':
#---------
if os.environ.get('OS','') == 'Windows_NT':
#---------
try: import win32api
#---------
# Emulation using _winreg (added in Python 2.0) and
# sys.getwindowsversion() (added in Python 2.3)
import _winreg
GetVersionEx = sys.getwindowsversion
#----------
def system():

    """ Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'.    
        An empty string is returned if the value cannot be determined.   
    """
    return uname()[0]
Mark Rushakoff
On a 64 bit machine, with Windows 7 (64 bit OS) this is the output: Python 3.1.1 (r311:74483, Aug 17 2009, 16:45:59) [MSC v.1500 64 bit (AMD64)] on win32 >>> print(sys.platform) win32 >>> platform.win32_ver() ('post2008Server', '6.1.7100', '', 'Multiprocessor Free')Note that the build explicitly calls it win32.
Francesco
Oops, I thought the output would have been formatted better. hope you can read it anyway.
Francesco