Насколько мне известно, http.server Python не поддерживает FTP.
Хотя в Python есть библиотека FTP, по сути это клиентская библиотека, предназначенная для того, чтобы помочь вашим сценариям взаимодействовать с существующими серверами FTP. К сожалению, в Python нет «встроенного» FTP-сервера.
Учитывая это, у вас фактически есть два варианта: использовать стороннюю библиотеку или кодировать решение для передачи файлов самостоятельно. http.server поддерживает CGI с python -m http.server --cgi
, поэтому теоретически возможно использовать этот механизм для передачи данных.
Для простой сторонней библиотеки FTP-сервера вы можете заглянуть в pyftpdlib (с документацией, в том числе с базовой страницей учебника ).
Что касается Putty, если вы хотите использовать SSH на ПК, то, насколько мне известно, в Windows нет собственного SSH-сервера. Google может помочь в этом, но для домашнего использования MobaSSH или FreeSSHd могут быть приемлемыми для вас решениями.
Недавно мне стало известно, что в достаточно обновленных версиях Windows 10 с установленной подсистемой Windows для Linux (WSL) могут быть некоторые опции для собственного SSH. Однако я не могу высказать предположение о том, будет ли этого достаточно для ваших нужд или нет.
Использование pyftpdlib
Если вы решили использовать pyftpdlib, вы можете установить его с помощью pip:
pip install pyftpdlib
Для простого сервера командной строки (похожего на http.server) вы можете использовать следующее:
python -m pyftpdlib
Это создаст FTP-сервер только для чтения с анонимной учетной записью. Обратите внимание, что вы можете включить запись (выгрузку) с помощью -w
, а также указать другие параметры, включая определенный интерфейс (если есть), порт и каталог FTP:
python -m pyftpdlib -w -i localhost -p 8081 -d "C:\path\to\FTP\anon"
Полный список параметров командной строки доступен с помощью python -m pyftpdlib -h
.
pyftpdlib Примечания сценария
Если вы хотите запустить pyftpdlib из примеров обучающих сценариев в Windows, вам следует помнить следующее:
Разделители каталогов Windows нужно будет экранировать (то есть вам нужно использовать \\
между папками, а не просто \
). Это не относится к серверам, запущенным через командную строку (см. Выше).
Если вы получаете ошибки сокета, это обычно происходит либо из-за проблем с брандмауэром / разрешением в Windows, либо из-за того, что порт уже используется. В любом случае, исправьте проблему или выберите другой порт.
Атрибут perm=
для authorizer.add_user
является необязательным, но, если он пропущен, пользователь по умолчанию получает доступ только для чтения. Чтобы увидеть список того, что означают все разрешения, вы должны взглянуть на документацию API .