Одна линия ftp-сервер в python
возможно ли иметь команду одной строки в python для выполнения простого ftp-сервера? Я хотел бы иметь возможность сделать это как быстрый и временный способ передачи файлов в Linux box без установки ftp-сервера. Предпочтительно использовать встроенные библиотеки python, чтобы не было ничего лишнего для установки.
9 ответов:
обязательное витая пример:
twistd -n ftpи, наверное, полезно:
twistd ftp --help Usage: twistd [options] ftp [options]. WARNING: This FTP server is probably INSECURE do not use it. Options: -p, --port= set the port number [default: 2121] -r, --root= define the root of the ftp-site. [default: /usr/local/ftp] --userAnonymous= Name of the anonymous user. [default: anonymous] --password-file= username:password-style credentials database --version --help Display this help and exit.
проверить pyftpdlib от Джампаоло Rodola. Это один из самых лучших ftp-серверов для python. Он используется в Google chromium (их браузер) и bazaar (система управления версиями). Это наиболее полная реализация на Python для RFC-959 (aka: спецификация реализации FTP-сервера).
из командной строки:
python -m pyftpdlibальтернативно 'my_server.py':
#!/usr/bin/env python from pyftpdlib import servers from pyftpdlib.handlers import FTPHandler address = ("0.0.0.0", 21) # listen on every IP on my machine on port 21 server = servers.FTPServer(address, FTPHandler) server.serve_forever()есть больше примеров на веб-сайте, если ты хочешь чего-то более сложного.
чтобы получить список параметров командной строки:
python -m pyftpdlib --helpПримечание, Если вы хотите переопределить или использовать стандартный ftp-порт, вам понадобятся права администратора (например, sudo).
почему бы не использовать одну строку HTTP сервер?
python -m SimpleHTTPServer 8000будет обслуживать содержимое текущего рабочего каталога через HTTP на порту 8000.
Если вы используете Python 3, Вы должны вместо этого написать
python3 -m http.server 8000посмотреть SimpleHTTPServer модуль "документы" для 2.x и http.сервер документы для 3.x.
кстати, в обоих случаях параметр port является необязательным.
ответы выше предполагали, что ваш дистрибутив Python будет иметь некоторые сторонние библиотеки для достижения цели "one liner python ftpd", но это не тот случай, о котором спрашивал @zio. Кроме того, SimpleHTTPServer включает веб-браузер для загрузки файлов, это недостаточно быстро.
Python не может сделать ftpd сам по себе, но вы можете использовать netcat,
nc:
ncЭто в основном встроенный инструмент из любых UNIX-подобных систем (даже встроенные системы), поэтому он идеально подходит для "быстрый и временный способ передачи файлов".Шаг 1, на стороне приемника, запустите:
nc -l 12345 | tar -xf -это будет слушать на порту 12345, ждем данных.
Шаг 2, на стороне отправителя:
tar -cf - ALL_FILES_YOU_WANT_TO_SEND ... | nc $RECEIVER_IP 12345вы также можете поставить
pvв середине, чтобы контролировать ход передачи:
tar -cf - ALL_FILES_YOU_WANT_TO_SEND ...| pv | nc $RECEIVER_IP 12345после передачи закончено, обе стороны
ncвыйдет автоматически, и работа сделана.
для пользователей pyftpdlib. Я нашел это на веб-сайте pyftpdlib. Это создает анонимный ftp с доступом на запись в вашей файловой системе, поэтому, пожалуйста, используйте с должной осторожностью. Дополнительные функции доступны под капотом для лучшей безопасности, поэтому просто посмотрите:
sudo pip install pyftpdlib python -m pyftpdlib -wможет быть полезно для тех, кто пробовал использовать устаревший метод.
sudo python-m pyftpdlib.FTP-сервера
установка:
pip install twistedкод:
from twisted.protocols.ftp import FTPFactory, FTPRealm from twisted.cred.portal import Portal from twisted.cred.checkers import AllowAnonymousAccess, FilePasswordDB from twisted.internet import reactor reactor.listenTCP(21, FTPFactory(Portal(FTPRealm('./'), [AllowAnonymousAccess()]))) reactor.run()глубже:
более простым решением будет библиотека пользователя pyftpd. Эта библиотека позволяет вращать Python FTP server в одну строку. Он не устанавливается по умолчанию, но мы можем установить его с помощью простой команды apt
apt-get install python-pyftpdlibтеперь из каталога, который вы хотите обслуживать, просто запустите модуль pythod
python -m pyftpdlib -p 21
Я не знаю об однострочном FTP-сервере, но если вы это сделаете
python -m SimpleHTTPServerон будет запускать HTTP-сервер на 0.0.0.0: 8000, обслуживая файлы из текущего каталога. Если вы ищете способ быстро получить файлы с линуксом с помощью веб-браузера, вы не можете разбить его.
хороший список инструментов
http://www.willdonnelly.net/blog/file-transfer/
Я сам использовал гав в нескольких случаях. Очень симпатичный.
Comments