Python调用os.system执行adb命令时无法识别变量该如何解决?
问题根因
adb命令逻辑错误:要向FireTV安装APK首先需要执行adb connect <设备IP>建立调试连接,你当前直接调用adb push且参数顺序错误,adb push的正确语法是adb push <本地文件路径> <设备端路径>,你把IP放到了第一个参数位置,本身就不符合命令要求。- 字符串拼接导致参数识别异常:如果路径中包含空格、中文、特殊符号,直接用f-string拼接命令会被
os.system拆分为多个独立参数,导致系统无法正确识别你传入的变量。 os.system本身不支持安全的参数传递,优先使用subprocess模块执行系统命令,从根源避免字符串拼接带来的解析错误。
修复方案(推荐)
使用subprocess.run传递命令列表的方式执行操作,无需处理字符串转义,参数识别更稳定:
import subprocess import PySimpleGUI as pyg # 此处保留你原有的窗口初始化代码 while True: event, values = window.read() ip = values["-IP-"].strip() local_apk_path = values["-PATH-"].strip() if event == pyg.WINDOW_CLOSED: exit() if event == 'Start': # 第一步:连接FireTV设备 connect_res = subprocess.run( ["adb", "connect", ip], capture_output=True, text=True ) if "connected" not in connect_res.stdout: print(f"设备连接失败:{connect_res.stderr}") continue # 第二步:直接安装APK,无需手动push到设备 install_res = subprocess.run( ["adb", "install", "-r", local_apk_path], capture_output=True, text=True ) if install_res.returncode == 0: print("APK安装成功") else: print(f"安装失败:{install_res.stderr}")
临时修复方案(保留os.system的写法)
如果需要继续使用os.system,需要给变量外侧包裹双引号规避特殊字符解析问题,同时修正命令逻辑:
if event == 'Start': # 先建立设备连接 os.system(f'adb connect "{ip}"') # 执行APK安装 os.system(f'adb install -r "{path}"')
内容的提问来源于stack exchange,提问作者Brisolo
相关产品推荐
相关产品推荐

