285

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.


Note: The answers claiming this is a duplicate question do not actually answer the question isWindows. They answer the question "what platform". Since many flavors of windows exist none of them comprehensively describe how to get an answer of isWindows.

dreftymac
  • 29,742
  • 25
  • 114
  • 177
gman
  • 92,182
  • 29
  • 231
  • 348
  • Similar to http://stackoverflow.com/questions/196930/how-to-check-if-os-is-vista-in-python – monkut Aug 25 '09 at 01:27
  • 3
    "There should be one-- and preferably only one --obvious way to do it." Alas, python gives us at least three ways.. – John Fouhy Aug 25 '09 at 01:35
  • 1
    Nit: [According to PEP8](https://www.python.org/dev/peps/pep-0008/#function-and-variable-names) you should prefer using the name `is_windows` over `isWindows`. – phoenix Jan 13 '19 at 12:56

5 Answers5

445

Python os module

Specifically for Python 3.6/3.7:

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

In your case, you want to check for 'nt' as os.name output:

import os

if os.name == 'nt':
     ...

There is also a note on os.name:

See also sys.platform has a finer granularity. os.uname() gives system-dependent version information.

The platform module provides detailed checks for the system’s identity.

Joel
  • 1,957
  • 2
  • 17
  • 30
Martin Beckett
  • 92,791
  • 27
  • 183
  • 258
68

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
  • 238,196
  • 44
  • 399
  • 395
  • 1
    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 Aug 25 '09 at 21:17
  • Oops, I thought the output would have been formatted better. hope you can read it anyway. – Francesco Aug 25 '09 at 21:18
  • This should be the accepted answer. – Marco Sulla Aug 12 '21 at 16:45
49

You should be able to rely on os.name.

import os
if os.name == 'nt':
    # ...

edit: Now I'd say the clearest way to do this is via the platform module, as per the other answer.

Eevee
  • 45,438
  • 11
  • 89
  • 125
37

in sys too:

import sys
# its win32, maybe there is win64 too?
is_windows = sys.platform.startswith('win')
user2683246
  • 3,169
  • 27
  • 30
Jochen Ritzel
  • 99,912
  • 29
  • 194
  • 188
15
import platform
is_windows = any(platform.win32_ver())

or

import sys
is_windows = hasattr(sys, 'getwindowsversion')
user2683246
  • 3,169
  • 27
  • 30