subprocess

subprocess模块允许启动一个新进程,并连接到它们的input输入/output输出/error错误管道,从而获取返回值
在python2.4新增,用于替换os.system、os.popen等

subprocess模块首推run方法,更高级用法可以直接使用Popen

run

说明:
1、shell=True 指令的参数可以是string或list,当为string时,必须加shell=True
2、universal_newlines=True 影响的输入与输出的数据格式.默认为False,stdout和stderr的输出是字节序列;True时,stdout和stderr的输出是字符串。

# 1、在cmd中执行基本指令
subprocess.run("adb shell input keyevent 4", shell=True)

# 2、获取是否执行成功
ret = subprocess.run("adb -s " + adb + " " + "exec-out screencap -p > " + pic_now, shell=True)
if ret.returncode == 0: # 成功时返回0
  pass
else:
  pass

# 3、获取执行后的输出值
# 获取最新的相片的名字;默认相片格式为jpg的
pic_name_bytes = subprocess.run(
    adb_device + "shell ls -t " + src_dir + " " + "| grep '.jpg'| head -n 1",
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    universal_newlines=True).stdout

Popen

Popen 是 subprocess的核心,子进程的创建和管理都靠它处理。

args:shell命令,可以是字符串,或者序列类型,如list,tuple。
bufsize:缓冲区大小,可不用关心
stdin,stdout,stderr:分别表示程序的标准输入,标准输出及标准错误
shell:与上面方法中用法相同
cwd:用于设置子进程的当前目录
env:用于指定子进程的环境变量。如果env=None,则默认从父进程继承环境变量
universal_newlines:不同系统的的换行符不同,当该参数设定为true时,则表示使用\n作为换行符

主要用的的参数就是:args、stdin、stdout、stderr、shell(官方推荐shell=False)
 
2、stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE:
分别代表标准输入,标准输出,标准错误输出。subprocess.PIPE代表的是管道可以理解成线程

参考链接:
https://blog.csdn.net/weixin_39059031/category_10163802.html