首页 » 软件开发 » 「Python」ADB自动化测试之Subprocess(进程用于值为指定默认)

「Python」ADB自动化测试之Subprocess(进程用于值为指定默认)

萌界大人物 2024-07-23 18:06:33 软件开发 0

扫一扫用手机浏览

文章目录 [+]

2.方法原理

Python实现ADB访问功能有两种方式,一种是直接使用第三方库如“pure-python-adb”等,另外一种是通过进程调用的方法来实现adb的访问,如“Subprocess模块”。
第三方模块原理上也是基于进程调用的方法来实现,只不过实现的方法都以模块的方式进行封装,用户无感。

项目重点介绍在Python中,如何通过Subprocess模块实现ADB调试的功能。

3.知识补充

3.1.何为ADB?

「Python」ADB自动化测试之Subprocess(进程用于值为指定默认) 「Python」ADB自动化测试之Subprocess(进程用于值为指定默认) 软件开发
(图片来自网络侵删)

ADB (Android Debug Bridge) 是 Android 软件开发工具包(SDK)中的一个工具,用于与连接到计算机的 Android 设备进行通信和操作。
它提供了一种方式来在开发过程中管理设备或模拟器,包括安装和调试应用程序、访问设备文件系统、执行 shell 命令等操作。
ADB 是开发 Android 应用程序和调试设备的重要工具,也被广泛用于测试和分析 Android 设备和应用程序的性能。

3.2.何为Subprocess?

「Python」ADB自动化测试之Subprocess(进程用于值为指定默认) 「Python」ADB自动化测试之Subprocess(进程用于值为指定默认) 软件开发
(图片来自网络侵删)

subprocess 模块是Python标准库中的一个模块,用于在Python程序中创建和管理新的进程,以便与操作系统进行交互。
它提供了一个简单而强大的接口,可以执行系统命令、启动新的进程、连接到进程的输入/输出流,并获取进程的返回值。

主要功能包括:

<a>.运行外部命令:可以使用 subprocess.run() 函数来运行系统命令或可执行文件。
该函数接受一个命令列表作为参数,可以指定命令的参数、输入、输出等选项。

<b>.连接到进程的输入/输出流:可以使用 subprocess.Popen() 函数启动新的进程,并获取其标准输入、标准输出和标准错误流,从而与进程进行交互。

<c>.等待进程完成:可以等待子进程完成并获取其返回码,以便根据进程的执行结果采取后续操作。

<d>.处理输入和输出:支持从进程读取输出或向进程发送输入数据,可以通过管道或文件描述符进行交换。

<e>.控制进程的环境变量:可以设置和修改进程执行时的环境变量,以影响进程的行为。

4.设计实现

subprocess常用的subprocess.run()和subprocess.Popen()。

4.1.subprocess.run方法

subprocess.run是 Python 标准库中用于运行子进程的函数之一,是 subprocess 模块中的一个高级函数,用于替代较低级别的函数如 subprocess.call()。
它的作用是启动一个新的进程,执行指定的命令,等待命令执行完成,并返回一个 CompletedProcess 对象,该对象包含有关进程执行的信息。

该方法接口定义如下:

subprocess.run(args, , stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, text=None, encoding=None, errors=None, env=None, universal_newlines=None)args:必需,要执行的命令及其参数。
可以是字符串(例如 "ls -l")或列表形式(例如 ["ls", "-l"])。
stdin, stdout, stderr:这些参数控制子进程的标准输入、标准输出和标准错误流。
可以是 subprocess.PIPE(创建管道)、subprocess.DEVNULL(丢弃输出)、文件描述符或文件对象。
input:作为标准输入传递给子进程的数据。
如果指定了 input 参数,它会覆盖 stdin 参数。
capture_output:如果设置为 True,则捕获子进程的标准输出和标准错误,并作为结果返回。
默认为 False。
shell:如果设置为 ,则通过 shell 执行命令。
默认为 。
在使用时应当谨慎,以避免潜在的安全风险。
cwd:指定子进程的工作目录。
timeout:设置子进程的超时时间,超过该时间将会抛出 TimeoutExpired 异常。
check:如果设置为 ,并且进程返回非零退出码,则会抛出 CalledProcessError 异常。
text, encoding, errors:这些参数用于控制输入和输出的文本处理。
text=True 表示使用文本模式(默认),encoding 指定编码,errors 指定解码时的错误处理策略。
env:指定子进程的环境变量。
默认为当前进程的环境变量。
universal_newlines:如果设置为 ,则行尾换行符会被转换为 \n。

4.2.subprocess.Popen方法

subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=(), encoding=None, errors=None, text=None, umask=None, timeout=None, check=False)参数说明:args:(字符串或者序列),要执行的命令及其参数,可以是字符串(会被解析为命令和参数的序列)或者序列(命令及其参数的列表或元组)。
bufsize:(整数)默认值为-1,用于指定缓冲策略,0 表示不缓冲,1 表示行缓冲,大于 1 表示缓冲区大小。
如果设置为 -1,则使用系统默认的缓冲大小。
executable:(字符串),默认值为None,可选的可执行程序路径,用于指定要执行的解释器。
stdin, stdout, stderr:(文件对象、文件描述符或者 subprocess.PIPE),默认值为None,用于指定子进程的标准输入、输出和错误输出的文件描述符。
可以为 subprocess.PIPE 创建管道以进行通信,或者为 None 表示继承父进程的相应流。
preexec_fn:(可调用对象),默认值为None,可选的可调用对象,在子进程开始执行前调用,例如用于设置进程组、改变进程优先级等。
close_fds:(布尔值)默认值为True,用于指定在启动子进程时是否关闭所有文件描述符,如果设置为 False,则会继承父进程的文件描述符。
shell:(布尔值),默认值为False,如果为 True,则通过 shell 来执行命令。
在使用时需要注意安全性,可能会引入安全风险。
cwd:(字符串),默认值为None,用于指定子进程的工作目录。
env:(字典),默认值为None,用于指定子进程的环境变量。
universal_newlines:(布尔值),默认值为False,如果为 True,则输出以文本模式而非字节模式进行处理。
startupinfo, creationflags:(平台相关的对象或者整数),默认值为None,用于设置子进程的一些启动信息,例如在 Windows 系统下可以设置窗口属性等。
restore_signals:(布尔值)默认值为True,用于指定在子进程结束时是否恢复父进程的信号处理设置。
start_new_session:(布尔值)默认值为False,如果为 True,则将子进程放入一个新的会话中,通常与 preexec_fn 结合使用。
pass_fds:(元组)默认值为空元组 (),用于传递给子进程的文件描述符。
encoding, errors:(字符串)默认值为None,用于指定文本模式的编码和错误处理方式。
text:(布尔值)默认值为None,替代参数 universal_newlines,用于指定是否以文本模式处理输入输出。
umask:(整数)默认为None,用于指定子进程的文件创建权限掩码。
timeout:(浮点数或者整数)默认值为None,用于设置超时时间,如果子进程在指定时间内没有结束,则会抛出超时异常。
check:(布尔值)默认值为False,如果为 True,则会在子进程返回非零状态码时抛出异常 subprocess.CalledProcessError。

下一篇文章实例讲解pyadb封装的方法和实现方式。

============================

关注作者:艾柯

一名5年的嵌入式架构师、系统分析师

爱好写作,只分享有用的干货

我的故事不是你的未来,但一定对你有所启示

举报/反馈

标签:

相关文章