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

Я пытаюсь сделать клиент-серверный проект. В этом проекте я должен отправить команду linux с клиента на сервер. Теперь я могу отправить некоторые команды, такие как ls, pwd et c. и они работают правильно, и я могу прочитать вывод в клиентском терминале, но когда я пытаюсь отправить команду "cd", я не получаю никакой ошибки, но каталог на сервере не изменяется. Если я использую команду os.chdir (os.path.abspath (data)) вместо subprocess.check_output, она может изменить каталог, но это бесполезно, потому что я могу отправлять другие команды, такие как ls, pwd, mkdir et c. Спасибо за вашу помощь

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

def threaded(c):
    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)

        if(len(data_o) > 0):
            c.send(data_o)
        else:
            c.send(b'There is no terminal output.')

    # connection closed
    c.close()

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

while True: 
 # message sent to server 

        s.send(message.encode('ascii')) 
        # messaga received from server 
        data = s.recv(1024)
   # print the received 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() 

1 Ответ

0 голосов
/ 28 марта 2020

Вы можете проверить, равна ли отправляемая команда cd, и изменить поведение среды выполнения на основании этого.

data_spl = data.split()

if data_spl[0] == 'cd':
    data_o = os.chdir(os.path.abspath(data_spl[1]))
else:
    data_o = subprocess.check_output(data, shell=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...