【发布时间】:2022-05-28 02:39:32
【问题描述】:
我创建了一个程序,它在运行时在 stdoutput 上打印一些指令。当我在 Windows 上执行应用程序时,我可以看到它们,但是当我在 Android 设备三星 S3 上运行相同的应用程序时,我在任何地方都看不到打印语句的输出。
有时我们可以在设备上看到与程序在同一目录中的 .kivy 目录,但这些日志文件也包含特定于 kivy 的日志,但它们会忽略打印语句输出。
谁能给点建议如何使用它...
【问题讨论】:
我创建了一个程序,它在运行时在 stdoutput 上打印一些指令。当我在 Windows 上执行应用程序时,我可以看到它们,但是当我在 Android 设备三星 S3 上运行相同的应用程序时,我在任何地方都看不到打印语句的输出。
有时我们可以在设备上看到与程序在同一目录中的 .kivy 目录,但这些日志文件也包含特定于 kivy 的日志,但它们会忽略打印语句输出。
谁能给点建议如何使用它...
【问题讨论】:
使用 adb logcat 获取应用程序的输出,或使用在线可用的应用程序之一来帮助显示您的日志和 grep 以获取“Python”。
上面的详细步骤::
在您的设备上启用开发者选项(Google 是您的朋友)。 然后开启usb调试。
图片取自http://androidfannetwork.com/
然后使用 USB 数据线将您的设备连接到您的电脑,然后在您的控制台中输入 adb devices。
它应该会显示您的设备(可能会提示您授予连接计算机的权限)。
一种更简单的方法是在小部件上使用视觉指示,而不是在控制台上打印。
你可以为你的应用创建一个函数bubprint
from kivy.core.window import Window
from kivy.clock import Clock
from kivy.factory import Factory
from kivy.lang import Builder
Builder.load_string('''
<InfoBubble@Bubble>
# declare our message StringProperty
message: 'empty message'
# let the bubble be of 200 device pixels
# and expand as necessary on the height
# depending on the message + 20 dp of padding.
size_hint: None, None
show_arrow: False
pos_hint: {'top': 1, 'right': 1}
size: dp(200), lbl.texture_size[1] + dp(20)
Label:
id: lbl
text: root.message
# constraint the text to be displayed within
# the bubble width and have it be unrestricted
# on the height.
text_size: root.width - dp(20), None
''')
def bubbprint(self, message):
message = repr(message)
if not self.info_bubble:
self.info_bubble = Factory.InfoBubble()
self.info_bubble.message = message
# Check if bubble is not already on screen
if not self.info_bubble.parent:
Window.add_widget(self.info_bubble)
# Remove bubble after 2 secs
Clock.schedule_once(lambda dt:
Window.remove_widget(self.info_bubble), 2)
【讨论】:
adb devices 它应该会显示您的设备(手机上可能会提示您允许电脑连接)。
Kivy 启动器忽略 print()。所以,请改用logging.info()。
在 main.py 中:
import logging
....
logging.info('any strings you want to output')
并且日志文件在.../kivy/your_app/.kivy/logs/
【讨论】:
没错,logcat 不接受 python 打印语句,因为它是一个 java 实用程序,旨在与 java Logger 一起使用。您需要手机上的 root 权限才能方便地使用 .kivy/logs。如果您有一部新手机,并且您不想以 root 权限或其他方式冒险保修,您可以使用 python 警告模块让 logcat 访问 python 输出:
import warnings
warnings.warn('print a custom message')
或者使用像pyjnius这样的java/python包来创建一个java Logger:
from jnius import autoclass
Logger = autoclass('java.util.logging.Logger')
mylogger = Logger.getLogger('MyLogger')
mylogger.info('print a message')
【讨论】: