How do I check if I'm running on Windows in Python? [duplicate]
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
.
Solution 1:
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:
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:
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.