Python asyncio: клиент отправляет строковые команды на сервер объединеннымиPython

Программы на Python
Ответить
Anonymous
 Python asyncio: клиент отправляет строковые команды на сервер объединенными

Сообщение Anonymous »

Я новичок в asyncio, пытаюсь настроить сервер на удаленном компьютере (win), который асинхронно получает строковые команды и выполняет их в cmd.
У меня простой клиент сторона:

Код: Выделить всё

import asyncio
import socket

async def send_task(skt: socket.socket, msg):
skt.send(str.encode(msg))
print('task sent')
await asyncio.sleep(0.5)

async def main(skt: socket.socket, myloop):
tasks = [
myloop.create_task(send_task(skt, r'dir D:\Users\sandbox')),
myloop.create_task(send_task(skt, r'D: && cd D:\Users\sandbox && run.bat')),
myloop.create_task(send_task(skt, r'copy D:\Users\sandbox\model1.mesh D:\Users\Zharov\SPLAV\copied_model1.mesh'))
]
await asyncio.wait(tasks)

sock = socket.socket()
sock.connect(('192.168.7.42', 50182))

loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(main(sock, loop))
И простая серверная часть:

Код: Выделить всё

import asyncio
import subprocess as sb
import socket
import time

async def executor(cmd):
print('start executing job %s' % cmd.decode('cp1251'))
proc = sb.Popen(cmd.decode('cp1251'), shell=True, stdout=sb.PIPE)
stdout, stderr = proc.communicate()
print(stdout.decode('cp1251'))
if stderr:
print(stderr.decode('cp1251'))
print('------------------------------------------')

async def main():
sock = socket.socket()
sock.bind(('', 0))
print('port: %d' % sock.getsockname()[1])
sock.listen(1)
conn, addr = sock.accept()
print('connected:', addr)
start = time.time()
while time.time() - start < 100:
data = conn.recv(1024)
if data:
await executor(data)
conn.close()

asyncio.run(main())
Команда 'dir' выполняется нормально, но вторая и третья командные строки, полученные сервером, объединены, это часть стандартного вывода сопрограммы executor():

Код: Выделить всё

start executing job D: && cd D:\Users\sandbox && run.batcopy D:\Users\sandbox\model1.mesh D:\Users\SPLAV\copied_model1.mesh
Это происходит в 100% случаев.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ncatenated
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»