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.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

 

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

關注微信公眾號(測試工程師小站)即可在手機上查閱,並可接收更多測試分享,發送【測試資料】更可獲取百G測試教程~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM