【问题标题】:How to let cmd-line continuous print log message?如何让命令行连续打印日志信息?
【发布时间】:2021-09-27 08:53:04
【问题描述】:

我写了一个简单的应用程序,我想每秒钟打印一次日志消息。 我打开一个终端并运行它,它运行良好。但是当我用鼠标点击终端时,它不会打印日志消息,除非我在终端中打印Enter

守则

import logging
from PyQt5.QtCore import *

logging.basicConfig(level=logging.DEBUG)


app = QCoreApplication([])

timer = QTimer()
timer.setInterval(1000)
timer.timeout.connect(lambda: logging.info("abc"))
timer.start()

app.exec()

【问题讨论】:

  • 你在 Windows 上吗?
  • 是的,我用的是win10系统。
  • 正如另一条评论中所解释的,问题与 PyQt 无关,而是与 Windows 命令提示符有关:Why is my command prompt freezing on Windows 10?。禁用该功能,输出将不再被阻止。

标签: python-3.x terminal pyqt5


【解决方案1】:

似乎是环境问题。 下面的示例演示了即使按下鼠标按钮,Qt 日志记录也能正常工作。

cat pyqt_logging_ex.py
#!/usr/bin/python3.9
import logging,os
from PyQt5.QtCore import *
from pynput import mouse,keyboard

def on_click(x, y, button, pressed):
    print("Mouse click")

def on_press(key):
    print("Key pressed, exiting")
    os._exit(0)

listener = keyboard.Listener(on_press=on_press)
listener.start()
listener = mouse.Listener(on_click=on_click)
listener.start()
print("Started listeners")

logging.basicConfig(level=logging.DEBUG)
app = QCoreApplication([])
timer = QTimer()
timer.setInterval(1000)
timer.timeout.connect(lambda: logging.info("abc"))
timer.start()
app.exec()

运行示例:

pyqt_logging_ex.py
Started listeners
INFO:root:abc
INFO:root:abc
INFO:root:abc
Mouse click
Mouse click
INFO:root:abc
INFO:root:abc
Mouse click
Mouse click
INFO:root:abc
INFO:root:abc
qKey pressed, exiting

我的环境:

uname -or ; lsb_release -d ; python3.9 --version
4.4.0-19041-Microsoft GNU/Linux
Description:    Ubuntu 20.04.3 LTS
Python 3.9.5

【讨论】:

  • 您的解决方案过滤窗口鼠标和按键事件,感谢您的帮助。
  • 如果 OP 使用的是 Windows 的命令提示符,那么它应该是一个“功能”:参见 Why is my command prompt freezing on Windows 10?
  • 我对这个“功能”很熟悉。这与我的答案无关,因为我使用的是 X 终端。这是一个很好的问题,因为问题描述中没有提到操作系统类型。
  • @DmitryMesserman 因为这种行为不太可能在 Linux 上发生,我认为问题与此有关,并且 OP 刚刚在对问题的评论中确认了这一点。
猜你喜欢
  • 1970-01-01
  • 2011-04-26
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多