325

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 is_windows():
  ...

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 is_windows. They answer the question "what platform". Since many flavors of windows exist none of them comprehensively describe how to get an answer of isWindows.

Neuron
  • 5,141
  • 5
  • 38
  • 59
gman
  • 100,619
  • 31
  • 269
  • 393
  • 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

495

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
  • 2,065
  • 2
  • 19
  • 30
Martin Beckett
  • 94,801
  • 28
  • 188
  • 263
79

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
  • 249,864
  • 45
  • 407
  • 398
  • 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
51

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
  • 47,412
  • 11
  • 95
  • 127
42

in sys too:

import sys
# its win32, maybe there is win64 too?
is_windows = sys.platform.startswith('win')
user2683246
  • 3,399
  • 29
  • 31
Jochen Ritzel
  • 104,512
  • 31
  • 200
  • 194
19
import platform
is_windows = any(platform.win32_ver())

or

import sys
is_windows = hasattr(sys, 'getwindowsversion')
user2683246
  • 3,399
  • 29
  • 31