python-adb实现批命令

subprocess 子进程管理文章收集

subprocess — Subprocess management — Python 3.12.0 documentation

subprocess --- 子进程管理 — Python 3.12.0 文档

subprocess --- 子进程管理 — Python 3.12.0 文档
subprocess --- 子进程管理 — Python 3.12.0 文档

例子1-- adb 需要su权限,pull出手机文件

先简单查看一下adb shell su的帮助

C:\Users\Lenovo>adb shell su -h
MagiskSU

Usage: su [options] [-] [user [argument...]]

Options:
  -c, --command COMMAND         pass COMMAND to the invoked shell
  -h, --help                    display this help message and exit
  -, -l, --login                pretend the shell to be a login shell
  -m, -p,
  --preserve-environment        preserve the entire environment
  -s, --shell SHELL             use SHELL instead of the default /system/bin/sh
  -v, --version                 display version number and exit
  -V                            display version code and exit
  -mm, -M,
  --mount-master                force run in the global mount namespace

stdin, stdoutstderr 分别指定被执行程序的标准输入、标准输出和标准错误文件句柄。 合法的值包括 None, PIPE, DEVNULL, 现在的文件描述符(一个正整数),现存的具有合法文件描述符的 file object。 当使用默认设置 None 时,将不会进行任何重定向。 PIPE 表示应当新建一个连接子进程的管道。 DEVNULL 表示将使用特殊文件 os.devnull

adb-pull-su 拉取文件
# 进入adb shell
import os

import subprocess

# 输入文件路径
file_path = input("请输入文件路径:")
# 进入adb shell并执行命令
subprocess.run(['adb', 'shell', 'su', '-c', f'cp {file_path} /sdcard/'])

# 从sdcard目录pull文件到当前文件夹
subprocess.run(['adb', 'pull', f'/sdcard/{os.path.basename(file_path)}'])

其中 f参数的说明

例子2- adb pull文件

手机 /sdcard/scrm/log/当前日期的指定文件log文件 ,如: /sdcard/scrm/log/2023-11-13log.txt

# 拉取当天的日志
import datetime
import os.path
import subprocess


now = datetime.datetime.now()
formatted_date = now.strftime("%Y-%m-%d")
print(formatted_date)
target_dir = os.path.dirname(os.path.abspath(__file__))
cmd = 'adb pull /sdcard/scrm/log/' + formatted_date + 'Log.txt' + ' ' + target_dir

# 创建子进程执行命令
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

# 获取命令执行结果
stdout, stderr = p.communicate()

# 打印结果
print(stdout.decode('utf-8'))
print(stderr.decode('utf-8'))

向外部函数传入序列形式参数的一个例子如下:

Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])

备注

将 shell 命令拆分为参数序列的方式可能并不很直观,特别是在复杂的情况下。 shlex.split() 可以演示如何确定 args 适当的拆分形式:

>>>import shlex, subprocess
>>>command_line = input()
/bin/vikings -input eggs.txt -output "spam spam.txt" -cmd "echo '$MONEY'"
>>>args = shlex.split(command_line)
>>>print(args)
['/bin/vikings', '-input', 'eggs.txt', '-output', 'spam spam.txt', '-cmd', "echo '$MONEY'"]
>>>p = subprocess.Popen(args) # Success!

特别注意,由 shell 中的空格分隔的选项(例如 -input)和参数(例如 eggs.txt )位于分开的列表元素中,而在需要时使用引号或反斜杠转义的参数在 shell (例如包含空格的文件名或上面显示的 echo 命令)是单独的列表元素。

edge openAi 命令概述

subprocess.run() 是 Python 的一个模块,它允许您生成新的进程,连接到它们的输入/输出/错误管道,并获取它们的返回代码。它是一个新的模块,替换了一些旧的模块和函数,如 os.systemos.spawn* 1

调用子进程的推荐方法是对于所有它可以处理的用例都使用 run() 函数。对于更高级的用例,可以直接使用底层的 Popen 接口 1

以下是使用 subprocess.run() 在 shell 中执行命令的示例:

subprocess.run() is a Python module that allows you to spawn new processes, connect to their input/output/error pipes, and obtain their return codes. It is a newer module that replaces several older modules and functions such as os.system and os.spawn* 1.

The recommended approach to invoking subprocesses is to use the run() function for all use cases it can handle. For more advanced use cases, the underlying Popen interface can be used directly 1.

import subprocess

result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE)
print(result.stdout.decode('utf-8'))

This code will execute the ls -l command in the shell and print the output to the console 2.

I hope this helps! Let me know if you have any other questions.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容