我试图确定如果操作系统是基于Unix从Python脚本。我能想到的两种方法可以做到这一点,但它们都有缺点:如何确定Python脚本运行的操作系统是否类Unix?
- 检查
platform.system()
是一个元组,如("Linux", "Darwin")
。问题在于我不想提供每一个类Unix系统的列表,特别是有很多* BSD变种。如果函数os.fchmod
存在 - 检查,因为这个功能仅在Unix可用。这似乎不是一个干净的或“Pythonic”的方式来做到这一点。
我试图确定如果操作系统是基于Unix从Python脚本。我能想到的两种方法可以做到这一点,但它们都有缺点:如何确定Python脚本运行的操作系统是否类Unix?
platform.system()
是一个元组,如("Linux", "Darwin")
。问题在于我不想提供每一个类Unix系统的列表,特别是有很多* BSD变种。如果函数os.fchmod
存在的Python的方式做到这一点是不关心你是在什么平台上。
如果有多个不同的设备来完成取决于平台的东西,那么他们的抽象的函数或类的后面,它应该尝试的设施,如果该设施不适用于当前平台上移动到另一个。
这似乎是一个明智的做法。您如何建议在代码中实施“尝试并继续”过程? 像这样: '尝试: something_for_windows() 除外: something_for_unix()'? 如果是的话,将如何实现它,如果你是针对两种以上不同类型的操作系统(例如:在Windows,Linux和Mac /达尔文)? – user2722730
@ user2722730尝试/除了是做到这一点的一种方法。如果有问题的API返回错误代码,如果该设施不存在,那么您将测试它们。如果你有两个以上,那么你会继续嵌套这些控制结构。或者,一旦你知道哪个设施被支持,你可以换掉默认的“尝试一堆东西”的实施,以调用检测到的设施。 – cdhowie
我需要导入特定于平台的Python模块来执行平台特定的任务,因此没有API错误代码。要按照我提到的3个平台的建议来做到这一点,我需要尝试一下 - 除了尝试 - 除外。这看起来像一个丑陋的方式来做到这一点,特别是因为3是一个奇数,最后除了它里面没有代码,或者我需要手动重新引发任何异常被捕获的Python脚本退出并打印错误。 – user2722730
import sys
if 'win' in sys.platform():
#windows
else:
#not windows
,或者你可以尝试导入平台相关的库
try:
import windows_only as generic
except ImportException:
try:
import unix_only as generic
except ImportException:
import stdlib.module as generic
print generic.common_function()
,然后还有的总是可靠
>>> import os
>>> os.name
nt
请注意,'os.name'可能是OP想要的粒度 - “”类Unix系统的“posix”,Windows的“nt”'。文档说'posix','nt','os2','ce','java'和'riscos'正在使用中。 –
[EAFP](http://docs.python.org/ 2/glossary.html) - 只需让脚本执行所有操作即可。它可能会在Windows上失败;只要确定它不符合你的要求即可。 –
检查'os.name =='posix''? – geoffspear
如何检查它是否不包含“Windows”? – shahkalpesh