失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python调用adb shell命令_python(或BAT脚本)自动执行adb shell以后的命令

python调用adb shell命令_python(或BAT脚本)自动执行adb shell以后的命令

时间:2020-10-22 10:17:41

相关推荐

python调用adb shell命令_python(或BAT脚本)自动执行adb shell以后的命令

最近在用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/static/95870124842449172/

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

--------------------------------------------------------------------------------

关注微信公众号(测试工程师小站)即可在手机上查阅,并可接收更多测试分享,发送【测试资料】更可获取百G测试教程~

如果觉得《python调用adb shell命令_python(或BAT脚本)自动执行adb shell以后的命令》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。