You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:48:01