Python os.system执行adb命令传参报错及变量未替换问题
问题根因
- 初始代码中
adb shell input text user属于硬编码固定字符串,没有引用你提前接收输入的user变量,所以输入框永远只会填入固定文本"user"。 os.system()仅接收1个字符串类型的命令参数,你拆分传入两个参数必然触发system() takes at most 1 argument (2 given)报错,该函数不支持命令、参数分离传值的用法。
修正方法
将用户输入的变量拼接为完整的命令字符串传入os.system()即可,推荐使用Python 3.6+原生支持的f-string实现拼接,可读性和出错率远优于加号拼接的写法。
基础可用写法
直接替换原代码中硬编码的输入行:
os.system(f"adb shell input text {user}")
特殊字符兼容处理
adb shell input text 对输入内容有格式要求,最常见的是空格需要转义为%s,否则输入到空格位置会被截断。可以提前对用户输入做转义处理,适配带空格、特殊符号的账号:
# 转义空格,其他特殊字符可根据实际账号规则补充替换逻辑 escaped_user = user.replace(" ", "%s") os.system(f"adb shell input text {escaped_user}")
修正后完整代码段
import os import time user = input("enter target account:") escaped_user = user.replace(" ", "%s") if inp == 1: os.system("adb shell monkey -p com.instagram.android -v 1") time.sleep(1) os.system("adb shell input tap 328 2200") time.sleep(1) os.system("adb shell input tap 500 178") time.sleep(1) os.system(f"adb shell input text {escaped_user}") time.sleep(1.5)
更稳妥的替代方案
如果不想手动处理各种转义规则,可以替换os.system为标准库的subprocess.run,用参数列表的形式传值,模块会自动处理特殊字符转义,稳定性更高:
import subprocess # 不需要提前转义空格等特殊字符 subprocess.run(["adb", "shell", "input", "text", user], check=True)
内容的提问来源于stack exchange,提问作者IFM
相关产品推荐
相关产品推荐

