【发布时间】:2020-09-10 12:01:36
【问题描述】:
我正在创建一个小应用程序,我可以在其中插入我的 android 手机的 IP 地址,然后按下一个按钮。我通过 ADB 无线连接。这行得通,现在我想在可滚动、不可编辑的文本字段中显示 adb logcat 的日志。但是在这里我遇到了一个问题,我试图像p = os.popen("adb logcat") 这样捕获logcat 命令的输出,然后像print(p.read()) 这样打印它。这只会让我的应用程序(tkinter)冻结,我猜这与打印永远不会结束的事实有关。有没有人知道如何显示 logcat 结果。
函数代码
def logcatcommand():
p = os.popen("adb logcat")
print(p.read())
按钮:
button2 = tk.Button(text="Open logcat",width=25, height=3, command=logcatcommand)
button2.grid(row=5, column=0)
你们也知道如何实时显示这些信息吗?我想我必须使用这样的代码:
result = scrolledtext.ScrolledText(window, wrap = tk.WORD, width = 40, height = 10, font = ("Times New Roman", 15))
result.grid(column = 1, row=0)
result.insert(tk.INSERT, output)
result.configure(state ='disabled')
其中输出是从终端检索的实时数据。
示例行 logcat:
09-10 14:10:28.479 971 3009 I WifiHAL : event received NL80211_CMD_VENDOR, vendor_id = 0x1374, subcmd = 0xd
09-10 14:10:34.779 1526 4567 I BatteryStatsService: In wakeup_callback: resumed from suspend
09-10 14:10:35.321 1526 4567 I BatteryStatsService: In wakeup_callback: suspend aborted
编辑: 感谢 Javier Gonzalez,我能够使用以下方法打印 logcat:
def logcatcommand():
popen = subprocess.Popen(args="adb logcat", shell=True, stdout=subprocess.PIPE)
return iter(popen.stdout.readline, b"")
def logcatresult():
for line in logcatcommand():
print(line)
但是当尝试将值设置为变量或只是做其他任何事情(例如尝试按下另一个按钮)时,我唯一会看到的是来自 Mac OSX 的彩虹纺车。
问候
【问题讨论】:
-
为什么打印永远不会结束?也包括您的 tkinter 代码,以便我们提供更好的帮助。
-
ADB Logcat 是一个命令,您可以在其中显示来自连接的 android 设备的设备信息。这是实时的,只报告当前状态。这仅在设备断开连接、命令停止或给定时间时停止。我希望它在连接时显示设备信息。我将在帖子中添加一些来自 logcat 的示例行。
-
发生这种情况的原因可能有很多,为了更好地理解,您可以显示更多代码吗?执行整个函数的部分?
标签: python android python-3.x tkinter logcat