如何从 Python 脚本中检测 Android OS?
How to detect Android OS from a Python script?
我是 运行 python 脚本,在 Android 设备的 termux 环境中,我希望能够检测到 OS 是 Android.
传统方法不起作用:
>>> import platform
>>> import system
>>> print(platform.system())
'Linux'
>>> print(sys.platform)
'linux'
>>> print(platform.release())
'4.14.117-perf+'
>>> print(platform.platform())
'Linux-4.14.117-perf+-aarch64-with-libc'
还有哪些可用的 ootb 选项?
一个明显有用的选项是 platform.machine()
,其中 returns armv8
— 这不仅仅是 'Linux' 但它只是体系结构,而不是 OS,它可能 return 误报,例如在 raspberry pi 或其他基于 arm 的系统上。
我尝试了 os.uname()
但没有成功。所以我可能建议使用子流程,因为 uname -o
returns b'Android\n'
.
这里是 Android 的简单检查:
import subprocess
subprocess.check_output(['uname', '-o']).strip() == b'Android'
有更简单的方法,不依赖于使用外部实用程序,只使用 os 模块。
这是代码:
import os # import **os** module, since we need it's *environ* variable
def isAndroid() -> bool: # function for fast usage
for item in list(os.environ.keys()): # checks every **key** in **os.environ** dict
if "ANDROID" in item.upper(): # if **key** contains word **ANDROID** then return True and break [Edit: Add `.upper()` so we can detect in lowercase env variables too]
return True
return False # returns False if no match happened
Returns True
在 Termux 和 Pydroid 3 上,但尚未在其他环境中测试
这个方法理论上有缺陷:
由于此方法使用 environmental 列表由 os 模块提供,如果有人更改它或它根本不包含 ANDROID word in keys 即使是Android平台,也会return False
编辑:Python 3.7+ option/variant
import sys
is_android: bool = hasattr(sys, 'getandroidapilevel') # Availability = 3.7+
除了版本 limit/availability 和 possible not-implementation 在任何其他实现中,此选项没有任何缺陷。
我是 运行 python 脚本,在 Android 设备的 termux 环境中,我希望能够检测到 OS 是 Android.
传统方法不起作用:
>>> import platform
>>> import system
>>> print(platform.system())
'Linux'
>>> print(sys.platform)
'linux'
>>> print(platform.release())
'4.14.117-perf+'
>>> print(platform.platform())
'Linux-4.14.117-perf+-aarch64-with-libc'
还有哪些可用的 ootb 选项?
一个明显有用的选项是 platform.machine()
,其中 returns armv8
— 这不仅仅是 'Linux' 但它只是体系结构,而不是 OS,它可能 return 误报,例如在 raspberry pi 或其他基于 arm 的系统上。
我尝试了 os.uname()
但没有成功。所以我可能建议使用子流程,因为 uname -o
returns b'Android\n'
.
这里是 Android 的简单检查:
import subprocess
subprocess.check_output(['uname', '-o']).strip() == b'Android'
有更简单的方法,不依赖于使用外部实用程序,只使用 os 模块。 这是代码:
import os # import **os** module, since we need it's *environ* variable
def isAndroid() -> bool: # function for fast usage
for item in list(os.environ.keys()): # checks every **key** in **os.environ** dict
if "ANDROID" in item.upper(): # if **key** contains word **ANDROID** then return True and break [Edit: Add `.upper()` so we can detect in lowercase env variables too]
return True
return False # returns False if no match happened
Returns True
在 Termux 和 Pydroid 3 上,但尚未在其他环境中测试
这个方法理论上有缺陷:
由于此方法使用 environmental 列表由 os 模块提供,如果有人更改它或它根本不包含 ANDROID word in keys 即使是Android平台,也会return False
编辑:Python 3.7+ option/variant
import sys
is_android: bool = hasattr(sys, 'getandroidapilevel') # Availability = 3.7+
除了版本 limit/availability 和 possible not-implementation 在任何其他实现中,此选项没有任何缺陷。