2

我正在研究跨平台实用程序,该实用程序涉及驱动器扫描和为其运行的操作系统自动创建 shell/批处理文件。不幸的是,我找不到一个简单的答案。如这些链接中所述:

  1. 何时使用 os.name、sys.platform 或 platform.system?
  2. 在 Python 中可靠地检测 Windows
  3. 从路径中提取文件名,无论 os/path 格式如何
  4. Python:我在什么操作系统上运行?
  5. 并在http://docs.python.org/library/platform.html#module-platform

各种platform.system()、platform.platform()、sys.platform、os.name()等都面临着未来未必完美的问题。也就是说,如果操作系统开发人员稍作改动,这些可能不起作用(至少在修补或修改之前)。因此,显然最好的解决方案是尝试上述每个方法的一小部分,以及使用 call() 来定位一些特定于操作系统的可执行文件。

这留下了我的问题:由于确定这一点的最佳方法涉及 platform.system、sys.platform 和 os.name(假设只需要广义识别),这些程序的各种可能输出是什么?这些模块中的每一个的 docs.python.org 部分仅列出了一些,并且这些页面并不完全是最新的。具体来说,我想知道最后三个 Mac OS、Win XP-Win 8 上的可能输出,并且只知道 Linux 满足了我的需求。任何人都知道输出是什么或我在哪里可以找到它们?

提前致谢。

澄清:我在这里寻找的是当前已知的值,以便我可以将它们合并到现有项目中,着眼于将来的代码修订使我更容易。所以当前返回值是我正在寻找的(最后 3 代 Mac OS* 和 Win * 因为除此之外可能不再使用太多)

4

1 回答 1

3

编辑:对于所有可能的返回值的具体问题:

  • 来自 sys.platform 的可能值的相关stackoverflow 答案?
  • 发布上面指出的答案:

    aix3 aix4 atheos beos5 darwin freebsd2 freebsd3 freebsd4 freebsd5
    freebsd6 freebsd7 generic irix5 irix6 linux2 mac netbsd1 next3 os2emx
    riscos sunos5 unixware7
    
  • 还:

    linux3, freebsd8, win32, dos, os2
    

    和别的。

  • (他们在 2006 年 8 月问了同样的问题。)

笔记:

正如其他人所指出的,sys.platform 源自系统供应商为其系统提供的名称。

/编辑。


不确定是否有可能拥有如此完美的未来。如果您只想了解操作系统(mac/win/linux),请查看sys.platform的示例。

get_os_name此外,如果您在未来看到很多变化,将事物保存在一个单独的函数中,例如让您控制或映射输入输出 - 每个操作系统每年一次?与您提到的其他功能结合起来也很方便。因此,您可以根据(os_name, 32/64bit, variant)(其中变体是 XP、Win8、Darwin 等)返回一个元组,具体取决于它如何影响您的脚本。

这些模块中的每一个的 docs.python.org 部分仅列出了一些,并且这些页面并不完全是最新的。

不幸的是真的。但同样,不可能考虑未来的环境或平台,甚至所有当前的环境或平台。合乎逻辑的做法是确保它适用于您测试/开发的当前平台。

于 2012-09-10T11:14:34.057 回答