【问题标题】:Python input being cleared when another thread calls print当另一个线程调用 print 时,Python 输入被清除
【发布时间】:2017-05-04 08:24:48
【问题描述】:

我有以下代码,它可以让我同时打印和接收键盘输入:

import time
from threading import Thread

def InpThread():
    while True:
        response = input("Type in here\r\n")
        print("Response is " + response)

tinp = Thread(target=InpThread)
tinp.start()

while True:
    time.sleep(1)
    print("Printing")

我已将其简化为一个简单的案例,我的案例还有其他内容,但这个问题对我来说是可以重现的。 上周,我对 input() 的返回没有任何问题,让我在此之前输入了所有字符。现在,似乎在另一个线程中每次调用 print() 都会擦除所有字符,所以大多数情况下我只剩下一个空输入,除非我计时正确并且速度非常快。

Printing
aPrinting
b
Response is b
Type in here
Printing

我正在使用 Python 解释器 3.5.2。

上周我看不到我的代码有任何变化,我能想到的只是 Windows 已经更新,或者可能是 python 模块。

我怎样才能保留所有输入而不被调用 print() 擦除?

【问题讨论】:

  • 你说的是印刷品'Printing'吗?因为,如果没有最后一个 while 循环,代码似乎可以正常工作!
  • 它说“响应是 b”的地方应该说“响应是 ab”,因为我同时按下了 a 和 b,但 a 被打印擦除了。我现在意识到值得一提的是,我在 PyCharm 中运行它,并且一个单独的控制台窗口似乎可能会产生不同的结果。
  • 我现在发现它肯定与 PyCharm 控制台有关。
  • 可能是,我尝试了 python 控制台,它按预期工作!

标签: multithreading python-3.x input printing pycharm


【解决方案1】:

您可能应该在打印功能上使用lock

检查This answer。它会创建一个锁对象并在以后使用它来打印。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多