How do I check if I'm running on Windows in Python?

PythonPlatformPlatform Specific

Python Problem Overview


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.

Python Solutions


Solution 1 - Python

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.

Solution 2 - Python

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]

Solution 3 - Python

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.

Solution 4 - Python

in sys too:

import sys
# its win32, maybe there is win64 too?
is_windows = sys.platform.startswith('win')

Solution 5 - Python

import platform
is_windows = any(platform.win32_ver())

or

import sys
is_windows = hasattr(sys, 'getwindowsversion')

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiongmanView Question on Stackoverflow
Solution 1 - PythonMartin BeckettView Answer on Stackoverflow
Solution 2 - PythonMark RushakoffView Answer on Stackoverflow
Solution 3 - PythonEeveeView Answer on Stackoverflow
Solution 4 - PythonJochen RitzelView Answer on Stackoverflow
Solution 5 - Pythonuser2683246View Answer on Stackoverflow