赞
踩
使用前置条件:
1、安装ADB环境
2、连接真机或者模拟器
import subprocess
import re
import os
# 执行 adb 命令获取窗口信息
adb_command = 'adb shell dumpsys window'
process = subprocess.Popen(adb_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, _ = process.communicate()
# 使用正则表达式提取包名
pattern = r'mCurrentFocus.*?u0\s+(\S+)/\S+'
match = re.search(pattern, output.decode())
if match:
package_name = match.group(1)
print("APP包名:", package_name)
else:
print("没有获取到APP包名.")
#方法二
result = os.popen(adb_command).read()
# print(result)
pattern = r'mCurrentFocus.*?u0\s+(\S+)/\S+'
match = re.search(pattern, result)
if match:
package_name = match.group(1)
print("APP包名:", package_name)
else:
print("没有获取到APP包名.")
在这个代码片段中,subprocess.Popen函数被用于执行adb_command命令,并设置了一些参数来控制子进程的行为和输出。
下面是这些参数的作用
shell=True: 这个参数指示Popen在执行命令时使用系统的默认shell。它允许使用shell特性,如管道、重定向和通配符等。当您需要执行复杂的shell命令时,可以将其设置为True。不过,请注意,使用shell=True也可能带来一些安全风险,因此在处理不受信任的输入时要小心[^2]。
stdout=subprocess.PIPE: 这个参数将子进程的标准输出重定向到一个管道中。通过设置为subprocess.PIPE,您可以捕获子进程的输出,并在父进程中进行处理。您可以使用process.stdout属性来访问子进程的标准输出
stderr=subprocess.PIPE: 这个参数将子进程的标准错误输出重定向到一个管道中。通过设置为subprocess.PIPE,您可以捕获子进程的错误输出,并在父进程中进行处理。您可以使用process.stderr属性来访问子进程的标准错误输出。
通过将stdout和stderr设置为subprocess.PIPE,您可以通过process.stdout和process.stderr属性读取子进程的输出和错误信息。这使得您能够在父进程中捕获和处理命令的输出和错误,例如将其存储到变量中、进行日志记录或进行进一步的处理。1 ↩︎
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。