Подпроцесс Python nbtstat "не удается найти файл" - PullRequest
0 голосов
/ 23 мая 2018

У меня проблемы с получением команды nbtstat для запуска на python.Всякий раз, когда я запускаю следующий код, я получаю сообщение об ошибке «WindowsError: [Ошибка 2] Системе не удается найти указанный файл».

print(subprocess.check_output(["nbtstat","-A",ipaddress]))

Я также пытался

print(subprocess.check_output(["C:\\Windows\\System32\\nbtstat.exe","-A",ipaddress]))

и

print(subprocess.check_output("nbtstat -A "+ipaddress))

и ни одна из этих версий не работала.

Есть ли что-то, чего мне не хватает в команде, чтобы заставить его работать правильно?


Вкл.Windows работает на Python 2.7.11 (не удается обновить)

1 Ответ

0 голосов
/ 23 мая 2018

Вам нужно написать команду как путь к исполняемому файлу и обменять \ System32 на \ sysnative.

Эта команда работает как нужно:

print(subprocess.check_output(["C:\\Windows\\sysnative\\nbtstat.exe","-A",ipaddress]))

На этой странице описывается папка sysnative, , но я дам здесь краткое (и ОЧЕНЬ упрощенное) объяснение:

System32 и Sysnative - это на самом деле одна и та же папка, доступ к которой осуществляется только под разными именами, но если программа, использующаяпапка является 32-разрядной, то имя, которое вы используете для доступа к этой папке, изменяет доступные параметры в папке.Если 32-разрядная программа использует путь System32, доступны только 32-разрядные параметры, а все 64-разрядные программы скрыты.Если вместо этого он использует путь Sysnative, тогда становятся доступны 64-битные параметры.

Как выясняется, nbtstat.exe на самом деле является 64-битной программой, и поэтому, когда 32-битный скрипт или другая программа пытаетсячтобы открыть его через папку System32, он возвращает ошибку о том, что программа не существует.И поскольку по умолчанию путь для поиска команд - System32, если вы не укажете путь, он также скажет, что программа не существует.

Из-за этого, для 32-битногоЧтобы использовать исполняемый файл 64-битной команды, необходимо явно указать путь к исполняемому файлу, и он должен быть указан через путь Sysnative вместо пути System32.

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