Использование Python 2.7 в Windows 10. Я хочу использовать tftp-клиент Windows. Почему 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
У меня на машине есть утилита "what", и она тоже не находит .exe файл для tftp, но находит tar, и это меня очень озадачивает. Я отмечаю, что TFTP.EXE имеет расширение в верхнем регистре, тогда как tar.exe в нижнем регистре, но Windows, насколько я знаю, никогда не была чувствительна к регистру, и в любом случае я пробовал обе команды в верхнем и нижнем регистре.
Кроме того, я думал, что os.system() просто передал строку системе для выполнения. Так что, конечно, Windows должна найти утилиту, если та же команда, введенная в командной строке, работает?
Я также попробовал os.system("cmd /c tftp") с теми же результатами - работает, если я набираю его в командной строке, а не из os.system(). Заключение tftp в кавычки или добавление явного .exe (или .EXE) также не работает.