lineas - salto de linea en una lista python
Servidor ftp de una lĂnea en python (9)
¿Es posible tener un comando de una línea en python para hacer un servidor ftp simple? Me gustaría poder hacer esto de forma rápida y temporal para transferir archivos a un cuadro de Linux sin tener que instalar un servidor ftp. Preferentemente, una forma de usar las bibliotecas creadas en python para que no haya nada más que instalar.
¿Por qué no utilizas un servidor HTTP de una sola línea?
python -m SimpleHTTPServer 8000
servirá los contenidos del directorio de trabajo actual sobre HTTP en el puerto 8000.
Si usa Python 3, debería escribir
python3 -m http.server 8000
Consulte los documentos del módulo SimpleHTTPServer para 2.x y los documentos http.server para 3.x.
Por cierto, en ambos casos, el parámetro de puerto es opcional.
Buena lista de herramientas en
http://www.willdonnelly.net/blog/file-transfer/
He usado la trama en varias ocasiones. Muy agradable.
Echa un vistazo a pyftpdlib de Giampaolo Rodola. Es uno de los mejores servidores ftp para python. Se usa en el cromo de Google (su navegador) y en el bazar (un sistema de control de versiones). Es la implementación más completa en Python para RFC-959 (también conocido como: especificación de implementación del servidor FTP).
Desde la línea de comando:
python -m pyftpdlib
Alternativamente ''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()
Hay más ejemplos en el sitio web si desea algo más complicado.
Para obtener una lista de opciones de línea de comando:
python -m pyftpdlib --help
Tenga en cuenta que si desea anular o utilizar un puerto ftp estándar, necesitará privilegios de administrador (por ejemplo, sudo).
Instalar:
pip install twisted
Entonces el código:
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()
Profundiza:
La solución más simple será usar la biblioteca de pyftpd. Esta biblioteca le permite girar el servidor FTP de Python en una línea. No viene instalado por defecto, pero podemos instalarlo usando el comando apt simple
apt-get install python-pyftpdlib
ahora desde el directorio que desea servir simplemente ejecute el módulo pythod
python -m pyftpdlib -p 21
Las respuestas anteriores suponían que su distribución de Python tendría algunas bibliotecas de terceros para lograr el objetivo "one liner python ftpd", pero ese no es el caso de lo que @zio estaba pidiendo. Además, SimpleHTTPServer implica una herramienta web para descargar archivos, no es lo suficientemente rápido.
Python no puede hacer ftpd por sí mismo, pero puede usar netcat , nc
:
nc
es básicamente una herramienta incorporada de cualquier sistema tipo UNIX (incluso sistemas integrados), por lo que es perfecto para " una forma rápida y temporal de transferir archivos ".
Paso 1, en el lado del receptor, ejecute:
nc -l 12345 | tar -xf -
esto escuchará en el puerto 12345, esperando datos.
Paso 2, en el lado del remitente:
tar -cf - ALL_FILES_YOU_WANT_TO_SEND ... | nc $RECEIVER_IP 12345
También puede poner a pv
en el medio para monitorear el progreso de la transferencia:
tar -cf - ALL_FILES_YOU_WANT_TO_SEND ...| pv | nc $RECEIVER_IP 12345
Una vez finalizada la transferencia, ambos lados de nc
se cerrarán automáticamente y se completará el trabajo.
No sé sobre un servidor FTP de una línea, pero si lo haces
python -m SimpleHTTPServer
Ejecutará un servidor HTTP en 0.0.0.0:8000, que sirve archivos del directorio actual. Si está buscando una forma de obtener rápidamente archivos de un linux box con un navegador web, no puede superarlo.
Obligatorio Twisted ejemplo:
twistd -n ftp
Y probablemente sea útil:
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.
Para usuarios de pyftpdlib. Encontré esto en el sitio web de pyftpdlib. Esto crea un ftp anónimo con acceso de escritura a su sistema de archivos, por lo que debe usarlo con sumo cuidado. Hay más funciones disponibles debajo del capó para mayor seguridad, así que solo tiene que mirar:
sudo pip install pyftpdlib
python -m pyftpdlib -w
Podría ser útil para aquellos que intentaron usar el método obsoleto anterior.
sudo python -m pyftpdlib.ftpserver