ChatGPT解决这个技术问题 Extra ChatGPT

How do I check the operating system in Python?

I want to check the operating system (on the computer where the script runs).

I know I can use os.system('uname -o') in Linux, but it gives me a message in the console, and I want to write to a variable.

It will be okay if the script can tell if it is Mac, Windows or Linux. How can I check it?


L
Laurent LAPORTE

You can use sys.platform:

from sys import platform
if platform == "linux" or platform == "linux2":
    # linux
elif platform == "darwin":
    # OS X
elif platform == "win32":
    # Windows...

sys.platform has finer granularity than sys.name.

For the valid values, consult the documentation.

See also the answer to “What OS am I running on?”


Note that in cygwin, it returns "cygwin" not "win32" as someone might expect.
Thanks. What's the difference between linux and linux2 ?
what would the output for BSD be ?
Note that since Python 3.3, "linux2" is no longer a possible value of platform (see the linked docs for corroboration) and so if you only need to support Python 3.3 and later you can safely delete the ` or platform == "linux2"` clause from the first condition.
@ohailolcat , for backward compatibility. It will probably never change. See the original patch that defined it this way for more info: mail.python.org/pipermail/patches/2000-May/000648.html
M
Mark Amery

If you want to know on which platform you are on out of "Linux", "Windows", or "Darwin" (Mac), without more precision, you should use:

>>> import platform
>>> platform.system()
'Linux'  # or 'Windows'/'Darwin'

The platform.system function uses uname internally.


I like this solution but I want to point out that from the docs it states that it will return Linux, Windows, Java or an empty string.devdocs.io/python~3.7/library/platform#platform.system
@BrandonBenefield, the enumeration is an example of possible values. On Apple devices, it returns “Darwin”.
R
Rob Watts

You can get a pretty coarse idea of the OS you're using by checking sys.platform.

Once you have that information you can use it to determine if calling something like os.uname() is appropriate to gather more specific information. You could also use something like Python System Information on unix-like OSes, or pywin32 for Windows.

There's also psutil if you want to do more in-depth inspection without wanting to care about the OS.


S
Sven Marnach

More detailed information are available in the platform module.


Does the platform module have any advantage over sys.platform? When would I want to use which approach?
@matth: You get more detailed, structured information from the platform module. Just click the link for documentation.
O
Ondrej Slinták

You can use sys.platform.