Передача cmd в subprocess.check_output () - PullRequest
0 голосов
/ 31 августа 2018

Программа устанавливает командную строку внутри окна Windows, которую затем может использовать окно Linux для выполнения команд Windows. Поэтому, когда у меня открыт cmd в linux, и я набираю dir, чтобы посмотреть, какие файлы находятся на машине с Windows, я запускаю исключение:

Блок try завершается неудачно и возвращает строку исключения. Если я делаю печать, чтобы увидеть, что такое raw_command: «встроенная функция dir»

while "\n" not in cmd_buffer:
    received_bytes=client_socket.recv(1024)
    cmd_buffer += received_bytes.decode()
    response = run_command(cmd_buffer)
    client_socket.send(str.encode(response))

#____run the command output locally and send it back to the client____
def run_command(command):
    raw_command = command.rstrip('\n')
    try:
        output = subprocess.check_output(raw_command, stderr=subprocess.STDOUT, shell=True)
    except:
        output = "Command failed \r\n" 
    return output

1 Ответ

0 голосов
/ 31 августа 2018

Ваша run_command функция работает. Так что проблема в том, как вы передаете ему команду.
Однако при использовании блока try...except вы можете проверить исключение, возникающее при его печати. ​​

import subprocess

def run_command(command):
    raw_command = command.rstrip('\n')
    try:
        output = subprocess.check_output(raw_command, stderr=subprocess.STDOUT, shell=True)
    except subprocess.CalledProcessError as e:
        output = "Command failed because: " + e.output.decode()

    return output

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