Python subprocess.Popen 调用 cmd 命令返回的结果是错的,但是同样的命令直接 cmd 执行就对的是怎么回事啊(目的是想调用 aapt dump badging 命令获取 app 包名)

小小测试 · 2021年03月17日 · 最后由 Heroman 回复于 2021年11月11日 · 1809 次阅读

个人感觉错误原因是:执行 subprocess.Popen 就没有成功一样;求大佬指点

代码如下:
import subprocess
apkpath = "E:/apium_phone/apk/YYHL_Android_V1_2_2_ver_r0601.apk"
aapt_path="D:/android-sdk/build-tools/28.0.2"
def get_apk_pkg():
# cmd = "aapt dump badging " + apkpath + " | grep package:"
cmd= "aapt dump badging " + apkpath + '| find "package"'
result = ""
print(cmd)
p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE, shell=True)
# print(p)
print(p.communicate())
(output, err) = p.communicate()
if output != "":
result = output.split()[1].decode()[6:-1]
return result
print(get_apk_pkg())

返回结果:

共收到 9 条回复 时间 点赞

求大佬帮忙看看

盲猜是执行路径的问题

剪烛 回复

你是说 cmd 命令路径吗?打印出来的 cmd 直接手动执行是没问题的

你打印出来是为啥错啊.p.stderr 有错误信息

剪烛 回复

你的意思是 print(p.stderr)吗?

剪烛 回复

整个代码运行错误就是
;但原因是调用 cmd 命令的时候返回的内容不对

应该是 pycharm 不知道 aapt 的执行路径
解决方法百度一下吧

MarvinWu 回复

确实是这样,在命令里加上 aapt 路径就好了,非常感谢


请问这个问题遇到过

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册