在android应用程序中运行python脚本

Posted

技术标签:

【中文标题】在android应用程序中运行python脚本【英文标题】:Run python Script in android application 【发布时间】:2012-02-21 03:28:53 【问题描述】:

我想获取远程计算机上已安装软件的列表。为此,我想在我的 android 应用程序中使用 python 脚本。现在,我有一个 python 脚本,它正在获取远程计算机上已安装软件的列表。但是,我不知道如何让它在 android 中得到支持。 为此,我找到了 SL4A android Scripting here 。所以,我尝试使用 SL4A 在 android 设备中运行我的 python 脚本。但是,它不起作用并给我错误,因为缺少一些像 win32.client 这样的包。我对 SL4A 不太了解,所以我不知道如何将我的python脚本转换为Android支持的形式。所以,任何人有任何想法或代码请建议我.....

另外,如果有人有其他方法可以从远程 PC 获取已安装的软件列表,那么请建议... 下面是我的python脚本

import wmi
from winreg import (HKEY_LOCAL_MACHINE, KEY_ALL_ACCESS, OpenKey, EnumValue, QueryValueEx)

c = wmi.WMI(computer="PC02",user="admin",password="a@1",namespace="root/default").StdRegProv
result, names = c.EnumKey (hDefKey=HKEY_LOCAL_MACHINE, sSubKeyName=r"Software\Microsoft\Windows\CurrentVersion\Uninstall")

print('These subkeys are found under "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall"\n\n')

separator = "*" * 80
keyPath = r"Software\Microsoft\Windows\CurrentVersion\Uninstall"
count = 0

while count < len(names):

    try:      
        print(separator+'\n')

        path = keyPath + "\\" + names[count]
        key = OpenKey(HKEY_LOCAL_MACHINE, path, 0, KEY_ALL_ACCESS)
        temp = QueryValueEx(key, 'DisplayName')
        display = str(temp[0])
        print (" Name: "+display+'\n',"key:",names[count])

        count += 1
    except:
        print ("Key:",names[count])
        count += 1
        continue

【问题讨论】:

我在你的 while 循环中缩进了你的 try/except 组。这似乎是正确的方法,但如果我错了,请纠正它 @joaquin 上面的代码在 Windows 计算机上可以正常运行,但在 Android 中无法运行,因为 Linux 直接不支持 WMI... 【参考方案1】:

现在可以使用任务在 gradle 系统中运行 python 脚本

task pythonFile(type:Exec) 
workingDir 'src_path'
commandLine 'python', 'my_script.py'
 

【讨论】:

【参考方案2】:

在远程计算机上运行脚本,并在 HTTP 上公开已安装软件的列表,编写这个简单的 web 应用程序的一个好方法是使用 flask 及其开发服务器来提供已安装软件的列表,然后编写一个 python使用原生 android web 界面获取列表并显示它的脚本。

【讨论】:

谢谢,但我不想使用互联网连接,我认为对于网络应用我必须使用互联网连接...... 您无法在不使用连接的情况下远程访问已安装程序的列表。然后它只是在本地。 我已经连接到一个 Wi-Fi 网络。我想获取我的 Wi-Fi 网络中计算机的软件信息...... 这对于我描述的解决方案来说非常好。在您想查看其上安装了哪些软件的计算机上,您运行您的 Web 应用程序,该应用程序将使用 wmi 在被询问时(通过 http get 请求)列出安装的软件包,然后在您的手机上将您的应用程序询问计算机上安装了什么。 我不想在远程计算机上运行任何东西。我不想在计算机上安装任何应用程序来运行我的 android 应用程序。我可以使用计算机上已经可用的任何内置服务来获取软件信息??【参考方案3】:

由于 WMI 是基于 WBEM 的,您或许可以使用 wbem 来访问它;您可能想尝试使用 pywbem,一个纯 python wbem 库。

【讨论】:

【参考方案4】:

您正在尝试在没有该库的设备上使用使用 Windows Management Instrumentation (WMI) 的 Python 脚本。

遗憾的是,Python 上的 WMI 需要 win32 库,该库仅在 Windows 上可用。我认为通过这种方式从 Android 设备检查远程 Windows 计算机上已安装的程序不会取得很大成功。

【讨论】:

感谢您的回复,如果这不可能,请建议我如果您有其他方法可以从 android 中的远程计算机获取已安装软件的列表...... @krushnakant:你能在服务器上运行一些东西吗?也许编写一个 web 应用程序,然后从您的 Android 设备访问它。 对于 webapp,我想我应该在 Android 设备上连接互联网,我想要没有互联网连接的软件信息。我想获取我的 wi-fi 网络中所有设备的软件信息.... @krushnakant:您可以通过 Wi-Fi 访问服务器上的 webapp。 我可以使用 SNMP 吗?我知道使用 SNMP 我可以使用 OID 获取一些信息,如“可用内存”、“系统名称”、“正在运行的进程数”、“默认路由”等。但我不知道软件信息..... .任何想法??【参考方案5】:

您遇到了缺少库的问题,因为您正在导入特定于 Windows 的库。无论如何,这不是要运行的正确脚本。该脚本似乎适用于计算机,而不是安卓手机。

【讨论】:

感谢您的回复。我知道这个脚本适用于计算机,但我应该在脚本中更改什么以使其与 android 手机兼容?我是 android 新手,我也不太了解SL4A 或 Python ..... 我对 android 开发一无所知,但(对我而言)显而易见的解决方案是创建某种应用程序以在计算机上运行,​​以及另一个应用程序在手机上运行。计算机应用程序将通过某种方式(互联网或 wifi)发布已安装程序的列表。然后,手机应用程序将检索该列表,并将其用于任何用途。 那么我知道没有真正的方法可以做到这一点

以上是关于在android应用程序中运行python脚本的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 运行 bash 脚本 - TypeError: bufsize must be an integer

Android蓝牙连接问题

在 Android 上使用 Numpy 和 OpenCV 运行 python 脚本

将 Android 手机作为稳定的网络服务器运行(用于 Python CGI 脚本)

是否可以将使用 ASE 创建的 Android 脚本用作 Android 的典型应用程序(例如用 Java 编写)?

Android:从 Java 代码调用 Python 脚本(通过 SL4A)