python FTP之引數解析與命令分發

2021-09-12 08:00:20 字數 2824 閱讀 3052

首先說引數解析,需要涉及optparse模組知識;

首先你必須匯入該類,並建立乙個optionparser物件,然後再使用parser.add_option(...)來定義命令列引數,及其幫助文件。

每個命令列引數就是由引數名字串和引數屬性組成的;

基本格式:

op.add_option("-s","--server",dest="server")
當你將所有的命令列引數都定義好了的時候,我們需要呼叫parse_args()方法來解析add_option()函式依次傳入的引數:

options,args = parser.parser_args()

options 是乙個列印出來呈現是字典,但本質它是乙個物件,其key字典中的關鍵字可能會是是我們所有的add_option()函式中的dest引數值,其對應的value值,是命令列輸入的對應的add_option()函式的引數值;

命令分發

使用hasattr(),來確認輸入命令是否是例項有的屬性,若是true就啟動命令對應的函式

if hasattr(self,cmd):

func=getattr(self,cmd)

func()

下面主要說一下ftp的命令執行的整體結構:

bin--ftp_server.py裡的**:

#-*-conding:utf-8 -*-

import os,sys

dirname=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

from core import main

if __name__ == '__main__':

'''啟動core目錄下的main檔案裡的ar**handler類

'''main.ar**handler()

core--main.py裡面的**:

#-*-coding:utf-8 -*-

import os,sys

import optparse

import socketserver

dir=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

from conf import settings

from core import server

class ar**handler():

def __init__(self):

#首先你必須匯入該類,並建立乙個optionparser物件,然後再使用parser.add_option(...)

#來定義命令列引數

self.op=optparse.optionparser()

'''這裡定義命令列引數,之所以將其注釋掉,是因為,服務配置的引數一般放在conf配置檔案中的settings中

self.op.add_option("-s","--server",dest="server")

self.op.add_option("-p","--port",dest="port")

'''#下面這一句,使用parse_args(),來解析傳入的引數

options,args=self.op.parse_args()

# print(options)

# print(args)

self.verify_args(options,args)

def verify_args(self,options,args):

'''命令分發'''

#根據上面引數解析的**,args中的第乙個肯定是cmd命令

cmd=args[0]

#判斷服務端是否有該命令匹配的屬性功能,有則呼叫函式,執行功能

if hasattr(self,cmd):

func=getattr(self,cmd)

func()

def start(self):

'''start方法,簡單舉例,若服務端接收的資訊中解析到start引數,就會根據命令分發,啟動該函式'''

print("the server is working")

s= socketserver.threadingtcpserver((settings.ip,settings.port),server.serverhandler)

#server.serverhandler類在core.server檔案中,主要的功能就在那個資料夾,而這裡所有的**,就是為了實現引數解析、命令分發

s.serve_forever()

def help(self):

pass

core--server檔案中的**(簡單舉例):

#-*-coding:utf-8 -*-

import socketserver

class serverhandler(socketserver.baserequesthandler):

'''該類主要供是core--main檔案中呼叫

'''def handle(self):

#所有的功能都寫在handle函式中……

print("ok")

MinIO 引數解析與限制

minio server 在預設情況下會將所有配置資訊存到 minio config.json檔案中。以下部分提供每個欄位的詳細說明以及如何自定義它們。乙個完整的 config.json 在 這裡 預設的配置目錄是 minio,你可以使用 config dir選項指定新的路徑覆蓋預設的路徑。mini...

引數解析argparse與logging用法

1 什麼是argparse?argparse 是 python 內建的乙個用於命令項選項與引數解析的模組,通過在程式中定義好我們需要的引數,argparse 將會從 sys.ar 中解析出這些引數,並自動生成幫助和使用資訊。簡單說就是乙個儲存引數的類,通過呼叫就可以把自己預先定義好的引數提取出來。2...

python標準庫之引數解析庫

命令列引數解析 初級 sys.argv 高階 getopt c style parser for command line options optparse 比較老了 argparse 2.7 後面這兩個標準庫,可以生成幫助文件,引數語法等符合某種規範的引數解析 關於引數問題 位置引數,選項引數 a...