python 예제 - 파이썬에서 한 줄의 ftp 서버




파일 전송 (9)

간단한 ftp 서버를하기 위해 파이썬에서 한 줄 명령을 사용할 수 있습니까? FTP 서버를 설치하지 않고도 파일을 리눅스 박스로 전송하는 빠르고 쉬운 방법으로이 작업을 수행 할 수 있기를 바랍니다. 가급적이면 내장 된 파이썬 라이브러리를 사용하여 추가로 설치할 필요가없는 방법.


Answers

더 간단한 해결책은 사용자 pyftpd 라이브러리에있을 것입니다. 이 라이브러리는 파이썬 FTP 서버를 한 줄로 돌릴 수있게합니다. 기본적으로 설치되지는 않지만 간단한 apt 명령을 사용하여 설치할 수 있습니다

apt-get install python-pyftpdlib

지금 당신이 봉사하고 싶은 디렉토리에서 pythod 모듈을 실행하십시오.

python -m pyftpdlib -p 21 

한 줄짜리 FTP 서버에 대해 잘 모릅니다.하지만 그렇게한다면

python -m SimpleHTTPServer

현재 디렉토리에서 파일을 제공하는 0.0.0.0:8000의 HTTP 서버를 실행합니다. 웹 브라우저에서 리눅스 파일을 신속하게 가져올 수있는 방법을 찾고 있다면, 이길 수 없습니다.


위의 대답은 모두 파이썬 배포판에 "one liner python ftpd"목표를 달성하기 위해 일부 타사 라이브러리가 있다고 가정했지만, 이는 @zio가 묻는 것의 경우는 아닙니다. 또한, SimpleHTTPServer는 파일 다운로드를위한 웹 브라우저를 포함하고 있습니다.

파이썬은 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 양쪽이 자동으로 종료되고 작업이 완료됩니다.


필수 Twisted 예 :

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 사용자의 경우. 나는 pyftpdlib 웹 사이트에서 이것을 발견했습니다. 이렇게하면 파일 시스템에 대한 쓰기 권한으로 익명의 ftp가 생성되므로주의해서 사용하십시오. 더 많은 보안 기능을 제공하기 위해 더 많은 기능을 사용할 수 있습니다.

sudo pip install pyftpdlib

python -m pyftpdlib -w

위의 비추천 메소드를 사용하여 시도한 사람들에게 도움이 될 수 있습니다.

sudo python -m pyftpdlib.ftpserver


Giampaolo pyftpdlib 에서 pyftpdlib 를 확인하십시오. 파이썬을위한 최고의 FTP 서버 중 하나입니다. Google 크롬 (브라우저)과 바자 (버전 제어 시스템)에 사용됩니다. RFC-959 (일명 : FTP 서버 구현 스펙)를위한 Python에서 가장 완벽한 구현입니다.

커맨드 라인에서 :

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)이 필요합니다.


설치 :

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()

더 깊이 이해하기 :

http://twistedmatrix.com/documents/current/core/examples/


왜 한 줄짜리 HTTP 서버를 사용하지 않습니까?

python -m SimpleHTTPServer 8000

포트 8000에서 HTTP를 통해 현재 작업 디렉토리의 내용을 제공합니다.

파이썬 3을 사용한다면, 대신에

python3 -m http.server 8000

2.x 용 SimpleHTTPServer 모듈 문서 및 3.x 용 http.server 문서를 참조하십시오.

그런데 두 경우 모두 포트 매개 변수는 선택 사항입니다.


변수가 정의되어 있고 값이 있는지 확인하려는 경우 a or b 만 가능 a or b

def test(myvar=None):
    # shorter than: print myvar if myvar else "no Input"
    print myvar or "no Input"

test()
test([])
test(False)
test('hello')
test(['Hello'])
test(True)

출력 할 것이다.

no Input
no Input
no Input
hello
['Hello']
True




python ftp ftp-server