首页 > 解决方案 > 从包含多个引号的 Python 脚本中运行 ADB 命令

问题描述

在我的 Appium Python 脚本中,这是我通常如何执行 ADB 调用的示例,我需要以下输出:

target_device = str(subprocess.check_output(["adb", "-s", device1, "shell", "getprop | grep ro.product.model"]))

这很好用,因为语法非常简单。但是,我遇到了以下 adb 命令,它将提供设备的 IMEI,这非常酷。这里是:

adb shell service call iphonesubinfo 1 | awk -F"'" 'NR>1 { gsub(/\./,"",$2); imei=imei $2 } END {print imei}'

但是,当我尝试从我的 Python Appium 脚本中运行该 adb 命令时,正如您所想象的那样,所有引号都会变得非常混乱,最终我无法成功运行它。但是,从命令提示符运行时它确实工作得很好(我已经测试过了)。

所以我的问题是,如何使用子进程运行该 IMEI 命令?我尝试了几种操作,但没有任何效果!!!谢谢

例如

target_device_imei = str(subprocess.check_output(["adb", "-s", device1, "shell", "service call iphonesubinfo 1 | awk -F"'" 'NR>1 { gsub(/\./,"",$2); imei=imei $2 } END {print imei}']))

想出解决办法:

import subprocess, re

device_imei = str(subprocess.check_output(["adb","shell", "service call iphonesubinfo 1"]))
device_imei = re.findall(r"'(.*?)(?<!\\)'", device_imei)
device_imei = "".join(device_imei)
device_imei = device_imei.replace('.','')

print device_imei

标签: androidsubprocessadbappiumpython-appium

解决方案


推荐阅读