Loop.subprocess_shell => как писать и читать из разных каналов asyncio django методами
Я пытаюсь реализовать ssh-клиент с помощью django & django-channels.
При поступлении запроса через websocket метод connect создает подпроцесс и запускается новый "терминал".
Затем, когда приходит следующее сообщение от клиента, метод receive обрабатывает запрос, и вот в чем моя проблема... Я не знаю, как отправить сообщение в подпроцесс shell, созданный на методе "connect"
Помощь будет оценена по достоинству.
PS: Я сделал такое же решение с pty.fork & select.select и оно работает, но я думаю, что это не совсем масштабируемо, поскольку нам нужно много терминалов, работающих одновременно.
class ShellConsumerAsync(AsyncWebsocketConsumer):
async def connect(self):
...
self.accept()
...
sub_process = await create_subprocess_shell(command,
stdin=async_subprocess.PIPE,
stdout=async_subprocess.PIPE,
stderr=async_subprocess.PIPE)
...
async def receive(self, message):
...
# Write to sub_process created here => (self.connect)
# check read availability on sub_process
# something like select.select or asyncio.add_reader
# message = await asyncio.wait_for(sub_process.stdout.read), timeout=15)
...
# Send message to room group
await self.channel_layer.group_send(
self.room_group_name,
{
'type': 'channel_gr_message',
'message': message
}
)