【问题标题】:see output of print statements on android using kivy - kivy launcher使用 kivy - kivy 启动器在 android 上查看打印语句的输出
【发布时间】:2022-05-28 02:39:32
【问题描述】:

我创建了一个程序,它在运行时在 stdoutput 上打印一些指令。当我在 Windows 上执行应用程序时,我可以看到它们,但是当我在 Android 设备三星 S3 上运行相同的应用程序时,我在任何地方都看不到打印语句的输出。

有时我们可以在设备上看到与程序在同一目录中的 .kivy 目录,但这些日志文件也包含特定于 kivy 的日志,但它们会忽略打印语句输出。

谁能给点建议如何使用它...

【问题讨论】:

    标签: android python kivy


    【解决方案1】:

    使用 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)
    

    【讨论】:

    • 我试图通过链接 developer.android.com/tools/help/logcat.html> 了解如何使用 adb,但是我无法理解在连接设备的 shell 提示符下运行 adb shell 是什么意思。当我使用 USB 电缆连接到 S3 并在 adb.exe 路径上运行此命令时,出现以下错误:D:\Paarth\Programming\Installers\Android\adt-bundle-windows-x86_64-20131030\adt-bundle-windows-x86_64 -20131030\sdk\platform-tools>adb.exe shell 错误:找不到设备 我做错了什么?如何运行设备的外壳?我很抱歉提出基本问题。
    • 在您的设备上启用开发者选项。然后启用usb调试。然后使用 USB 数据线将您的设备连接到您的电脑,然后输入 adb devices 它应该会显示您的设备(手机上可能会提示您允许电脑连接)。
    【解决方案2】:

    Kivy 启动器忽略 print()。所以,请改用logging.info()

    在 main.py 中:

    import logging
    ....
        logging.info('any strings you want to output')
    

    并且日志文件在.../kivy/your_app/.kivy/logs/

    【讨论】:

      【解决方案3】:

      没错,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')
      

      【讨论】:

        猜你喜欢
        • 2013-10-08
        • 2010-09-20
        • 1970-01-01
        • 1970-01-01
        • 2014-12-13
        • 1970-01-01
        • 2018-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多