python中使用Popen.communicate返回一个错误的元组

qq_31671109 2017-05-29 12:08:58
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'';这明显不对啊,调试了好久都没解决
请大神们帮忙看看,解答一下,万分感谢
...全文
1368 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinyang328 2021-03-17
  • 打赏
  • 举报
回复
引用 5 楼 36073160 的回复:
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"
你好,你解决问题了吗,怎么解决的啊
jinyang328 2021-03-17
  • 打赏
  • 举报
回复
你解决问题了吗?
36073160 2017-09-20
  • 打赏
  • 举报
回复
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"
qq_31671109 2017-05-30
  • 打赏
  • 举报
回复
引用 1 楼 ckc 的回复:
把cmd打印出来,手工执行看有没有问题
不好意思哈兄弟,我把grep换成find之后就对了,可以返回正确的元组了。 在网上查了下grep好像是liunxs系统的命令,这个命令是直接不能在win10系统下用,还是需要安装说明工具就可以用呢
qq_31671109 2017-05-30
  • 打赏
  • 举报
回复
引用 1 楼 ckc 的回复:
把cmd打印出来,手工执行看有没有问题
直接在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返回的元组一模一样
qq_31671109 2017-05-30
  • 打赏
  • 举报
回复
直接在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返回的元组一模一样
ckc 2017-05-29
  • 打赏
  • 举报
回复
把cmd打印出来,手工执行看有没有问题

5,177

社区成员

发帖
与我相关
我的任务
社区描述
软件工程/管理 质量管理/软件测试
功能测试压力测试安全性测试 个人社区 湖南省·长沙市
社区管理员
  • 软件测试
  • 虫无涯
  • 小博测试成长之路
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎大家加入到软件测试的社区,在这里,希望大家勇于发表自己的看法,欢迎大家分享自己在软件测试工作过程中遇到的问题以及工作经验分享。

1.想转行的小伙伴,遇到问题没有及时回复的,可以私聊小博进行反馈

2.大家对社区有好的建议,都可以在社区发帖进行反馈

推荐大家学习的软件测试入门笔记:软件测试入门学习笔记

试试用AI创作助手写篇文章吧