Как я могу отправить пустой вывод терминала с сервера на клиент? - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь отправить команду linux с клиента на сервер и повторно отправить вывод с сервера на клиент. Я могу отправить все команды на сервер, и они работают на стороне сервера, но когда я отправляю команду как «mkdir, rmdir et c». эти команды работают на стороне сервера, но клиент не может получить сообщение о выходе терминала. Я думаю, что это потому, что на самом деле нет выходного сообщения, моя клиентская сторона застряла, и я должен перезапустить его.

на стороне клиента:

    while True: 
 # message sent to server 

        s.send(message.encode('ascii')) 
        # messaga received from server 

        data = s.recv(1024) 
   # print the received message 
        # here it would be a reverse of sent message

        print('Received from the server :',str(data.decode('ascii'))) 
        # ask the client whether he wants to continue 

        ans = input('\nDo you want to continue(y/n) :') 
        if ans == 'y':
            message = input("enter message")
            continue
        else: 
            break

    # close the connection 
    s.close() 

на стороне сервера:

while True:

        # data received from client

        data = c.recv(1024)
        if not data:
            print('Bye')
            break
        try:
            data_o = subprocess.check_output(data, shell=True)
        except subprocess.CalledProcessError as e:
            c.send(b'failed\n')
            print(e.output)
        #data_o = subprocess.Popen(["echo", data], stdout=subprocess.PIPE)

        print(type(data_o))
        c.send(data_o)

пример вывода: enter image description here

Спасибо за ваша помощь

1 Ответ

1 голос
/ 27 марта 2020

Поскольку выходные данные являются байтовым объектом длины 0, ничего не отправляется, но ваш клиент продолжает ждать ответа. Простым решением было бы просто послать строку типа «ничего не было получено». Чтобы избежать путаницы в случае отправки команды echo no output was given, вы можете добавить префикс к каждому ответу.

примерно так:

if data[0:prefix_len]== success_prefix:
    print(data[prefix_len:]
elif data[0:prefix_len] == empty_prefix:
    print("command had no output")


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...