最近在用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输入ÿ