我需要看些什么来确定我使用的是Windows还是Unix等等?
当前回答
如果你想要用户可读的数据但仍然是详细的,你可以使用platform.platform()
>>> import platform
>>> platform.platform()
'Linux-3.3.0-8.fc16.x86_64-x86_64-with-fedora-16-Verne'
这里有几个不同的调用,你可以用它来确定你的位置,linux_distribution和dist在最近的python版本中被删除了。
import platform
import sys
def linux_distribution():
try:
return platform.linux_distribution()
except:
return "N/A"
def dist():
try:
return platform.dist()
except:
return "N/A"
print("""Python version: %s
dist: %s
linux_distribution: %s
system: %s
machine: %s
platform: %s
uname: %s
version: %s
mac_ver: %s
""" % (
sys.version.split('\n'),
str(dist()),
linux_distribution(),
platform.system(),
platform.machine(),
platform.platform(),
platform.uname(),
platform.version(),
platform.mac_ver(),
))
此脚本的输出运行在一些不同的系统(Linux, Windows, Solaris, MacOS)和架构(x86, x64, Itanium, power pc, sparc)上,可在这里获得:https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version
Ubuntu 12.04服务器为例给出:
Python version: ['2.6.5 (r265:79063, Oct 1 2012, 22:04:36) ', '[GCC 4.4.3]']
dist: ('Ubuntu', '10.04', 'lucid')
linux_distribution: ('Ubuntu', '10.04', 'lucid')
system: Linux
machine: x86_64
platform: Linux-2.6.32-32-server-x86_64-with-Ubuntu-10.04-lucid
uname: ('Linux', 'xxx', '2.6.32-32-server', '#62-Ubuntu SMP Wed Apr 20 22:07:43 UTC 2011', 'x86_64', '')
version: #62-Ubuntu SMP Wed Apr 20 22:07:43 UTC 2011
mac_ver: ('', ('', '', ''), '')
其他回答
一个新的答案如何:
import psutil
psutil.MACOS #True (OSX is deprecated)
psutil.WINDOWS #False
psutil.LINUX #False
如果我使用MACOS,这将是输出
你也可以只使用平台模块而不导入os模块来获取所有信息。
>>> import platform
>>> platform.os.name
'posix'
>>> platform.uname()
('Darwin', 'mainframe.local', '15.3.0', 'Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64', 'x86_64', 'i386')
可以使用下面这行代码创建一个漂亮整洁的布局:
for i in zip(['system','node','release','version','machine','processor'],platform.uname()):print i[0],':',i[1]
给出如下输出:
system : Darwin
node : mainframe.local
release : 15.3.0
version : Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64
machine : x86_64
processor : i386
通常缺少的是操作系统版本,但你应该知道如果你运行的是windows, linux或mac,一个平台独立的方法是使用这个测试:
In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]:
....: if i[0]:
....: print 'Version: ',i[0]
使用模块平台检查可用的测试,并打印出适合您系统的答案:
import platform
print dir(platform)
for x in dir(platform):
if x[0].isalnum():
try:
result = getattr(platform, x)()
print "platform."+x+": "+result
except TypeError:
continue
>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Linux'
>>> platform.release()
'2.6.22-15-generic'
platform.system()的输出如下:
Linux: Linux 麦克:达尔文 Windows:
参见:平台-访问底层平台的识别数据
短篇小说
使用platform.system()。它返回Windows、Linux或Darwin(适用于OSX)。
很长的故事
Python中有3种操作系统,每种方法都有其优缺点:
方法1
>>> import sys
>>> sys.platform
'win32' # could be 'linux', 'linux2, 'darwin', 'freebsd8' etc
它是如何工作的(来源):在内部调用OS api来获得OS定义的OS名称。有关各种特定于操作系统的值,请参见这里。
教授:没有魔法,低水平。
缺点:依赖于操作系统版本,所以最好不要直接使用。
方法2
>>> import os
>>> os.name
'nt' # for Linux and Mac it prints 'posix'
它是如何工作的(源代码):它在内部检查python是否有名为posix或nt的特定于操作系统的模块。
优点:简单检查是否posix操作系统
缺点:Linux和OSX之间没有区别。
方法3
>>> import platform
>>> platform.system()
'Windows' # for Linux it prints 'Linux', Mac it prints `'Darwin'
这是如何工作的(来源):在内部,它最终会调用内部的操作系统api,获得特定于操作系统版本的名称,如'win32'或'win16'或'linux1',然后通过应用一些启发式方法规范化为更通用的名称,如'Windows'或'Linux'或'Darwin'。
优点:Windows, OSX和Linux的最佳便携方式。
缺点:Python人员必须保持规范化启发式是最新的。
总结
如果你想检查操作系统是Windows还是Linux或OSX,那么最可靠的方法是platform.system()。 如果你想通过内置的Python模块posix或nt进行特定于操作系统的调用,则使用os.name。 如果你想获得OS本身提供的原始OS名称,那么使用sys.platform。
推荐文章
- 如何在Python中进行热编码?
- 如何嵌入HTML到IPython输出?
- 在Python生成器上使用“send”函数的目的是什么?
- 是否可以将已编译的.pyc文件反编译为.py文件?
- Django模型表单对象的自动创建日期
- 在Python中包装长行
- 如何计算两个时间串之间的时间间隔
- 我如何才能找到一个Python函数的参数的数量?
- 您可以使用生成器函数来做什么?
- 将Python诗歌与Docker集成
- 提取和保存视频帧
- 使用请求包时出现SSL InsecurePlatform错误
- 如何检索Pandas数据帧中的列数?
- except:和except的区别:
- 错误:“字典更新序列元素#0的长度为1;2是必需的”