目錄結構
ftp_server/bin/ftp_server.py
import os,sys
path=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# print(path)
# print(sys.path)
# print(os.path.dirname(os.path.abspath(__file__)))
# print(os.path.abspath(__file__))
from core import main
if __name__ == '__main__':
main.ar**handler()
複製**
ftp_server/conf/settings.py
ip='127.0.0.1'
port=8080
複製**
ftp_server/core/main.py
#解析命令列的命令
import optparse
import socketserver
from conf import settings
#這個檔案不是啟動檔案
from core import server
class ar**handler():
def __init__(self):
self.op=optparse.optionparser()
# self.op.add_option('-s','--server',dest='server')
# self.op.add_option('-p','--port',dest='port')
options,args=self.op.parse_args()
self.verify_args(options,args)
# print(options,args)
# print(options.server)#ip位址
# print(options.port)#埠
def verify_args(self,options,args):
cmd=args[0]
if hasattr(self,cmd):
func =getattr(self,cmd)
func()
def start(self):
print('the server is working....')
s = socketserver.threadingtcpserver((settings.ip,settings.port),server.serverhandle)
s.serve_forever()
def help(self):
pass
```***ftp_server/core/server.py***
```import socketserver
import json
class serverhandle(socketserver.baserequesthandler):
def handle(self):
while 1 :
data = self.request.recv(1024).strip()
data = json.loads(data.decode('utf8'))
if data.get('action'):
if hasattr(self,data.get('action')):
func = getattr(self,data.get('action'))
func(**data)
else:
print('error')
else:
print('error')
def auth(self,**data):
print('data:',data)
def put(self,**data):
pass
複製**
ftp_client/ftp_client.py
import optparse
import socket
import json
import configparser
class clienthandler():
def __init__(self):
self.op = optparse.optionparser()
self.op.add_option('-s','--server',dest='server')
self.op.add_option('-p','--p',dest='port')
self.op.add_option('-u', '--username', dest='username')
self.op.add_option('-p', '--password', dest='password')
self.options,self.args = self.op.parse_args()
#對埠和ip位址進行安全校驗
self.verify_args(self.options,self.args)
#連線服務端
self.make_connection()
def verify_args(self,options,args):
server = options.server
port=options.port
# username=options.username
# password=options.password
if int(port)>0 and int(port)<65535:
return true
else:
exit('the port is in 0-65535')
def make_connection(self):
self.sock=socket.socket()
self.sock.connect((self.options.server,int(self.options.port)))
#和服務端進行互動
def interactive(self):
self.authenticate()
def authenticate(self):
if self.options.username is none or self.options.password is none:
username = input('username:')
password = input('password:')
return self.getauth_result(username,password)
return self.getauth_result(self.options.username,self.options.password)
def respones(self):
data = self.sock.recv(1024).decode('utf8')
data = json.loads(data)
return data
def getauth_result(self,user,pwd):
data =
self.sock.send(json.dumps(data).encode('utf8'))
response=self.respones()
print(response)
ch = clienthandler()
#互動ch.interactive()
複製**
執行結果 python之unittest驗證函式功能
一 待驗證指令碼 首先,有如下三個指令碼,分別對應三個函式 分別匯入模組行,如下 1 from fuction1 import fu12 from fuction2 import fu23 from fuction3 import fu3 執行指令碼檢視結果 1 x fu1 10 2print x ...
python生成驗證碼 python之驗證碼生成
今天向大家總結一下python在做專案時用到的驗證碼生成工具 code與captcha code 全稱 graphic verification code 安裝 pip install code 使用 import code s,v code.generate 序列解包 s.show 顯示生成的驗證...
Python入門之print 函式的部分功能
1 在控制台輸出數字 print 數字 其中數字可以是任意型別,包括int,float 例 print 520 2 在控制台輸出字串 print 字串 print 字串 與輸出數字所不同的是,在控制台輸出字串,需要在print 函式裡面加入一對單引號 或者一對雙引號 在引號中間加入想要輸出的字串內容...