Как получить os.system () Python для запуска клиентской функции Windows 10 tftp? - PullRequest
0 голосов
/ 13 января 2020

Использование Python 2.7 на Windows 10. Я хочу использовать клиент Windows tftp. Почему os.system () дает другой результат, чем ввод команды tftp в командной строке? (Использование 2,7 вместо 3 и Windows TFTP-клиент вместо поиска другой библиотеки - «потому что так говорит босс».)

Я не знаю, является ли это Python вопрос, вопрос Windows 10 или, в частности, клиент TFTP Windows 10.

Клиент TFTP установлен на моем компьютере. Если я открою командную оболочку и наберу tftp, я получу сообщение помощи от клиента tftp.

>tftp

Transfers files to and from a remote computer running the TFTP service.

TFTP [-i] host [GET | PUT] source [destination]
...

Но если я попытаюсь с Python, клиент tftp не будет найден:

>python
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.system('tftp')
'tftp' is not recognized as an internal or external command,
operable program or batch file.
1
>>>

На моем пути есть C: \ Windows \ system32 \ TFTP.EXE, и C: \ Windows \ system32. Если я пытаюсь использовать другой exe-файл из C: \ Windows \ system32, например tar.exe, он работает:

>>> os.system('tar')
tar: Must specify one of -c, -r, -t, -u, -x
1

На моем компьютере есть утилита "which", и она тоже не находит файл .exe для tftp, но находит tar, и это меня действительно озадачивает. Я отмечаю, что TFTP.EXE имеет расширение в верхнем регистре, тогда как tar.exe - в нижнем регистре, но, насколько мне известно, Windows никогда не учитывал регистр, и в любом случае я пробовал обе команды в верхнем и нижнем регистре .

Кроме того, я подумал, что os.system () только что передал строку в систему для выполнения. Так что наверняка Windows должна найти утилиту, если та же команда, набранная в командной строке, работает?

Я также пробовал os.system ("cmd / c tftp") с теми же результатами - работает если я наберу его в командной строке, а не из os.system (). Размещение кавычек вокруг tftp или добавление явного .exe (или .EXE) также не работает.

1 Ответ

0 голосов
/ 16 января 2020

В Windows 10, чтобы запустить tftp.exe из Python, мне нужно запустить C: \ Windows \ SysNative \ tftp.exe

>>> os.system("c:\\windows\\system32\\tftp")
'c:\windows\system32\tftp' is not recognized as an internal or external command,
operable program or batch file.
1
>>> os.system("c:\\windows\\sysnative\\tftp")

Transfers files to and from a remote computer running the TFTP service.
...

C: \ windows \ system32 \ tftp.exe существует, но на этом компьютере нет C: \ windows \ sysnative \ tftp.exe. На самом деле нет никакого каталога sysnative, даже если вы ищете системные и скрытые файлы из оболочки, запущенной от имени администратора. Поэтому я этого не понимаю. Но это работает.

Мне кажется, что взломать то, что MS действительно мешает использовать tftp.exe, так что, возможно, я должен принять подсказку.

...