python调用bat脚本并出现cmd窗口_python(或BAT脚本)自动执行adb shell以后的命令

本文介绍了在Python中使用subprocess.Popen执行adb shell命令时遇到的问题及解决方案。当尝试执行多条adb shell命令时,直接使用Popen可能会遇到无法执行后续命令的情况。解决方案包括通过文本文件重定向和在同一命令行中使用逻辑操作符(如&&)来连接多条命令。此外,还提到了使用BAT脚本自动化执行adb shell命令的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在用python做一个小工具,自动执行一些adb shell命令,使用subprocess.Popen来实现。

不过遇到个问题就是执行adb shell后就无法执行后面adb

shell里的命令了,查询得知subprocess.Popen可以自定义stdin参数来源,比如可以使用上一个命令的stdout来做为下一个命令的stdin

p1 = subprocess.Popen('adb shell',

shell=True, stdout=subprocess.PIPE,

stderr=subprocess.PIPE)

p2 = subprocess.Popen('ls', shell=True, stdin=p1.stdout,

stdout=subprocess.PIPE, stderr=subprocess.PIPE)

print p2.stdout.read()

但在这里并未执行成功,怀疑原因是用subprocess执行adb

shell,是在CMD环境下执行,而后面执行ls命令,就已经进入adb shell环境了

当然,我们可以直接在CMD中输入adb shell ls来达到目的,但一些adb

shell自有命令如ll、grep在CMD中就无法识别

找到两个解决办法:

一、

1.把命令先保存在一个txt文档,如在D盘建一个a.txt,里面保存命令

cat /data/system/packages.xml | grep -E "a|b|c|d"

2.用输入重定向的方法在CMD输入: adb shell < a.txt

可以看到命令已经在CMD中执行了,但是会卡死,此时任何输入有效,但不显示,需要CTRL+C后才会显示出来

3.也可以将第2步做成BAT自动执行,建立一个run.bat,输入

adb shell < d:\a.txt

保存后直接执行run.bat就可以了

二、

这个方法虽然可行,但太过麻烦,而且需要第3方的文件来周转,之后在一个网友的帮助下,得到解决办法:

1.依然用python的subprocess.Popen实现

p1 = subprocess.Popen('adb shell cd sdcard&&cd

Android&&cd data&&ls |grep com',

stdout=subprocess.PIPE, stderr=subprocess.PIPE)

print p1.stdout.read()

同时执行多行命令:

无论是 Linux/Mac 还是 Windows 的 shell 命令都支持一条命令来执行多条命令的。一共有

&&,&,||,| 这么几种方式,这几种方式分别代表着不同的含义:

&&:command1 && command2,如果 command1

执行成功了,就执行命令 command2,如果 command1 失败了,就不会执行 command2 了。

&:command1 & command2,无论 command1 执行成功与否都会执行

command2。

||:command1 || command2,如果 command1 执行成功了,就不会执行 command2 了,如果

command1 失败了,就会继续执行 command2。

|:command1 | command2,command1 的结果做为 command2 的参数,如果 command1

失败了,整个命令也就都失败了。

Linux/Mac 下还可以使用 ; 来链接两条命令,顺序执行命令,不管成功与否都往后执行,和 &

含义一样。

参考:http://mzywqwq.blog.163.com/blog/static/958701220134842449172/

http://mp.weixin.qq.com/s?__biz=MjM5NTU0MDg0MA==&mid=2651235866&idx=3&sn=07422d4d4878b9c341701e56258eec4d&chksm=bd04fc1d8a73750b84ff685496e54d10c7e91bdcbf52dce867b261719bd0976a32fcea13b032&mpshare=1&scene=23&srcid=0206kAR2A4w9AySfYB2nvl0d#rd

BAT脚本如何自动执行 adb shell 以后的命令

@echo off echo su > temp.txt echo 其它命令 >> temp.txt adb shell < temp.txt del temp.txt 求问 ...

python 使用&period;bat文件自动执行

@echo off title demo cmd "/c activate py36 && cd demo&& python demo_test.py&quo ...

如何在python脚本里面连续执行adb shell后面的各种命令

如何在python脚本里面连续执行adb shell后面的各种命令 adb shell "cd /data/local && mkdir tmp" adb shel ...

top 自动执行的shell脚本中,使用top -n 1 &gt&semi; log&period;txt&comma; 上电自动执行,文件无输出

. 自动执行的shell脚本中,使用top -n > log.txt, 上电自动执行,文件无输出,使用一下命令解决: //usr/bin/top -d -n -b > log.txt 如果 ...

Android 执行 adb shell 命令

Android 执行Adb shell 命令大多需要root权限,Android自带的Runtime. getRuntime().exec()容易出错,在网上找到了一个执行adb shell命令的类 ...

Android 设备,如何root,执行adb shell,查看设备中的数据库信息等【转】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值