【发布时间】:2022-01-08 21:18:22
【问题描述】:
我正在编写命令行/shell 聊天。为了更好地处理输入和输出,我使用 asyncio。但是 asyncio 不适用于 python 的标准 input() 函数。所以我一直在寻找其他解决方案并遇到了 aioconsole。但是文档很难理解(恕我直言,写得不是很好。)所以请您帮我在函数message_sender() 中实现异步输入,方法是替换当前名为asynchronous_input() 的占位符函数。 (没有 aioconsole 的函数也可以工作,这正是我遇到的)是的,还有其他关于类似事情的 SO 帖子,但它们都使用非常旧的 asynio 版本。
import asyncio
import struct
async def chat_client():
reader, writer = await asyncio.open_connection("xxx.xxx.xxx.xxx", xxx)
await message_sender(writer)
await message_reciever(reader)
async def message_sender(writer):
try:
while True:
message = await #asynchronous_input()
await message_writer(message, writer)
except asyncio.TimeoutError: # Just ignore this exception handler for now, it's only there for later
print("----------- You lost your connection -----------")
writer.close()
await writer.wait_closed()
quit()
async def message_reciever(reader):
while True:
size, = struct.unpack('<L', await reader.readexactly(4))
rcv_message = await reader.readexactly(size)
print(rcv_message.decode())
async def message_writer(message, writer):
data = message.encode()
writer.write(struct.pack('<L', len(data)))
writer.write(data)
await writer.drain()
try:
message = ""
asyncio.run(chat_client())
except KeyboardInterrupt:
print("----------- You left the Chat. -----------")
quit()
【问题讨论】:
标签: python input chat python-asyncio