我正在开发一个客户端/服务器 cli 应用程序,我遇到了 python3 的 input() 函数和多线程的问题。
这里是示例代码:
import threading
import time
def thread_function():
for i in range(10):
time.sleep(3)
print(f"[Thread {i}]")
while True:
thread = threading.Thread(target=thread_function)
thread.start()
command = input("input> ")
print("Command:",super1)
此代码提示命令并输出它,同时线程正在运行并随机时间(在本例中每 3 秒)在屏幕上显示数据。当我在提示中输入值时,如果线程显示信息,我的输入将被分成两半,如下所示(例如 whoami):
input> who[Thread 0]
ami
Command:whoami
我正在寻找一种方法来获得类似的东西:
intput> who
[Thread 0]
intput> whoami
在此示例中,我将在线程输出之前键入命令的开头,然后在线程输出之后完成它。它还必须支持“删除”键。
线程数据必须是完全交互的,当线程需要显示信息时,必须同时显示在cli控制台中(不能等待输入函数结束)。
我已经尝试使用 sys.stdin 和 readchar,但我没有找到实现此目的的好方法。
如果有人有想法来实现这种事情,我会很乐意讨论它:)
谢谢
尝试使用sys.stdin和readchar,但我没有找到实现此目的的好方法。
使用readchar,跟随字符列表并显示好东西(线程侧)有点复杂,并且它没有处理del键。
使用 sys.stdin 不可能逐个字符获取完整的命令。
以上是在多线程中使用锁定的一个很好的练习。您的实现没有任何问题,并且计算机肯定正在执行其应该执行的操作。
您的解决方案是建立一个锁,然后在正确的位置使用该锁(获取并释放它)。请记住,锁只是代码不同部分之间关于如何使用资源的协议。在这种情况下,资源是“屏幕”,解决方案是确保没有人在没有正确持有锁的情况下使用屏幕。
我试图在不完全放弃的情况下提出建议:)
这有帮助吗?