Я пытаюсь выполнить команду следующую subprocess.Popen() в Python 2,6чтения вывода из subprocess.Popen в питона
output = subprocess.Popen("psexec -accepteula \\machineName -u username -p password cmd.exe /C fsutil fsinfo drives", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
print(output.communicate())
Но я получаю следующий результат с output.communicate()
('\r\n', '\r\nPsExec v2.11 - Execute processes remotely\r\nCopyright (C) 2001-2014 Mark Russinovich\r\nSysinternals - www.sysinternals.com\r\n\r\nConnecting to machineNameHere...\r\r\rStarting PSEXESVC service on machineNameHere...\r\r\rConnecting with PsExec service on machineNameHere...\r\r\rStarting cmd.exe on machineNameHere...\r\r\r\r\ncmd.exe exited on machineNameHere with error code 0.\r\n')
Когда я запускаю ту же команду psexec из строки cmd в windows, я получаю правильный вывод.
PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
**Drives: A:\ C:\ D:\**
cmd.exe exited on machineNameHere with error code 0.
Ищу выход ** Drives: A: \ C: \ D: ** даже при выполнении Psexec команды, используя subprocess.Popen(). Как я могу это сделать?
Теперь я сузил проблему, выполняя различные команды, такие как dir и echo «test». Проблема заключается в том, что Popen читает только первую строку в stdout, а не полный вывод. Любые предложения по устранению этого?
Прочтите непосредственно из процесса stdout. – Rishav
Возможно, обратная косая черта интерпретируется по-разному между двумя средами? Попробуйте использовать необработанную строку для команды Popen. –
PsExec не будет передавать вам клиентский результат. Лучше использовать OpenSSH для запуска команд удаленно, хотя это немного больно для установки в Windows. Вы также можете запустить собственный JSON-сервер. – Muposat