python中使用Popen.communicate回傳一個錯誤的元組,求各位大神幫忙看看這是什么情況,該怎么改
代碼如下:
PATH = lambda p: os.path.abspath(
os.path.join(os.path.dirname(__file__), p)
)
apkpath = PATH("../appiumnautomaster/img/YYHL_Android_V1_2_5_ver_d0505.apk")
def get_apk_pkg():
cmd = "aapt dump badging " + apkpath + " | grep package:"
result = ""
p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE, shell=True)
print(p.communicate())
(output, err) = p.communicate()
if output != "":
result = output.split()[1].decode()[6:-1]
print(result)
return result
print(get_apk_pkg())
程式目的是想用appt dump badging 命令決議apk,拿到apk的包名
運行代碼時,列印的p.communicate()是這樣的:
(b'', b"'aapt' \xb2\xbb\xca\xc7\xc4\xda\xb2\xbf\xbb\xf2\xcd\xe2\xb2\xbf\xc3\xfc\xc1\xee\xa3\xac\xd2\xb2\xb2\xbb\xca\xc7\xbf\xc9\xd4\xcb\xd0\xd0\xb5\xc4\xb3\xcc\xd0\xf2\r\n\xbb\xf2\xc5\xfa\xb4\xa6\xc0\xed\xce\xc4\xbc\xfe\xa1\xa3\r\n")
但是看教程回傳的元組格式應該是:(stdoutdata, stderrdata);也就是說stdoutdata對應的是b'';這明顯不對啊,除錯了好久都沒解決
請大神們幫忙看看,解答一下,萬分感謝
uj5u.com熱心網友回復:
把cmd列印出來,手工執行看有沒有問題uj5u.com熱心網友回復:
直接在pycharm上運行代碼的時候能回傳元組(b'', b"'aapt' \xb2\xbb\xca\xc7\xc4\xda\xb2\xbf\xbb\xf2\xcd\xe2\xb2\xbf\xc3\xfc\xc1\xee\xa3\xac\xd2\xb2\xb2\xbb\xca\xc7\xbf\xc9\xd4\xcb\xd0\xd0\xb5\xc4\xb3\xcc\xd0\xf2\r\n\xbb\xf2\xc5\xfa\xb4\xa6\xc0\xed\xce\xc4\xbc\xfe\xa1\xa3\r\n")但是把cmd列印出來輸入命令列,提示grep不是內部命令;怎樣才能讓grep成為內部命令啊(win10系統);如果不是內部命令那為什么在pycharm上運行的時候不報錯還能回傳元組呢
后來我把grep改成find,再到命令列可以得到正確的package(package: name='com.example.monkneytest' versionCode='1' versionName='1.0');但是在pycharm上運行回傳的元組跟用grep回傳的元組一模一樣
uj5u.com熱心網友回復:
直接在pycharm上運行代碼的時候能回傳元組(b'', b"'aapt' \xb2\xbb\xca\xc7\xc4\xda\xb2\xbf\xbb\xf2\xcd\xe2\xb2\xbf\xc3\xfc\xc1\xee\xa3\xac\xd2\xb2\xb2\xbb\xca\xc7\xbf\xc9\xd4\xcb\xd0\xd0\xb5\xc4\xb3\xcc\xd0\xf2\r\n\xbb\xf2\xc5\xfa\xb4\xa6\xc0\xed\xce\xc4\xbc\xfe\xa1\xa3\r\n")
但是把cmd列印出來輸入命令列,提示grep不是內部命令;怎樣才能讓grep成為內部命令啊(win10系統);如果不是內部命令那為什么在pycharm上運行的時候不報錯還能回傳元組呢
后來我把grep改成find,再到命令列可以得到正確的package(package: name='com.example.monkneytest' versionCode='1' versionName='1.0');但是在pycharm上運行回傳的元組跟用grep回傳的元組一模一樣
uj5u.com熱心網友回復:
不好意思哈兄弟,我把grep換成find之后就對了,可以回傳正確的元組了。
在網上查了下grep好像是liunxs系統的命令,這個命令是直接不能在win10系統下用,還是需要安裝說明工具就可以用呢
uj5u.com熱心網友回復:
def get_apk_pkg(self):cmd = "aapt dump badging " + self.apkpath + " | findstr package:"
print(cmd)
result = ""
p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE, shell=True)
(output, err) = p.communicate()
if output != "":
print(p)
print('***********')
print(output)
result = output.split()[1].decode()[6:-1]
print(result)
return result
我的 還是報錯呢
list index out of range
b"'aapt' \xb2\xbb\xca\xc7\xc4\xda\xb2\xbf\xbb\xf2\xcd\xe2\xb2\xbf\xc3\xfc\xc1\xee\xa3\xac\xd2\xb2\xb2\xbb\xca\xc7\xbf\xc9\xd4\xcb\xd0\xd0\xb5\xc4\xb3\xcc\xd0\xf2\r\n\xbb\xf2\xc5\xfa\xb4\xa6\xc0\xed\xce\xc4\xbc\xfe\xa1\xa3\r\n"
uj5u.com熱心網友回復:
你解決問題了嗎?uj5u.com熱心網友回復:
你好,你解決問題了嗎,怎么解決的啊轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/268766.html
標籤:軟件測試
