我正在使用 Pythonplatform模块来识别 MacOS 版本,如下所示:
import platform
print(platform.mac_ver())
Run Code Online (Sandbox Code Playgroud)
输出:
In [1]: import platform
In [2]: platform.mac_ver()
Out[2]: ('10.16', ('', '', ''), 'x86_64')
Run Code Online (Sandbox Code Playgroud)
我已经更新到BigSur,版本不对,应该是11.0.1
我查看了平台的源代码,它似乎解析了一个这个文件/System/Library/CoreServices/SystemVersion.plist来获取信息。从 Python 读取此文件时,我得到了一个不正确的版本,但从 bash 中它是正确的
重击:
import platform
print(platform.mac_ver())
Run Code Online (Sandbox Code Playgroud)
Python:
In [1]: import platform
In [2]: platform.mac_ver()
Out[2]: ('10.16', ('', '', ''), 'x86_64')
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
这是同一ipython会话的输出
Amirs-MacBook-Pro:~ arossert$ cat /System/Library/CoreServices/SystemVersion.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>ProductBuildVersion</key>
<string>20B50</string>
<key>ProductCopyright</key>
<string>1983-2020 Apple Inc.</string>
<key>ProductName</key>
<string>macOS</string>
<key>ProductUserVisibleVersion</key>
<string>11.0.1</string>
<key>ProductVersion</key>
<string>11.0.1</string>
<key>iOSSupportVersion</key>
<string>14.2</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
在 Big Sur 发行说明的已知问题部分,存在以下内容:
由于 macOS 版本从 10.x 更改为 11,某些第三方脚本可能会产生意外结果。 (62477208)
解决方法:在调用环境中设置SYSTEM_VERSION_COMPAT=1,例如:$SYSTEM_VERSION_COMPAT=1 legacy_script.pl
在https://eclecticlight.co/2020/08/13/macos-version-numbering-isnt-so-simple/ 上还有一个相当广泛的 3rd-party 文章
为 Big Sur 编译的应用程序返回“11.0”作为操作系统版本。
为早期版本编译的应用程序获得“10.16”。这是假设 10 作为前缀不会中断的逻辑。
环境变量SYSTEM_VERSION_COMPAT可用于控制返回的文件版本;SYSTEM_VERSION_COMPAT=0 cat /System/Library/CoreServices/SystemVersion.plist返回11.0.1,而SYSTEM_VERSION_COMPAT=1 cat /System/Library/CoreServices/SystemVersion.plist返回10.16。(请注意,赋值和调用之间应该有一个空格,而不是换行符,cat这样 shell 会将其视为临时环境变量赋值,而不是非导出 shell 变量的赋值)。
| 归档时间: |
|
| 查看次数: |
385 次 |
| 最近记录: |