欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

把任何重復(fù)任務(wù)都變成一條CLI命令:CLI-Anything實(shí)踐與思考

把任何重復(fù)任務(wù)都變成一條CLI命令:CLI-Anything實(shí)踐與思考 1. 為什么我決定把所有重復(fù)任務(wù)都改造成CLI工具先講一件小事。上個(gè)月我接手一個(gè)數(shù)據(jù)運(yùn)營(yíng)項(xiàng)目第一天光是把客戶發(fā)來的Excel表整理成標(biāo)準(zhǔn)格式這個(gè)動(dòng)作就手動(dòng)做了四遍打開WPS篩選空行刪掉合并單元格把日期列改成YYYY-MM-DD另存為CSV再寫段Python把CSV灌進(jìn)數(shù)據(jù)庫。做完第四遍的時(shí)候我盯著屏幕想如果按這個(gè)頻率重復(fù)一年我得花掉整整兩個(gè)工作日在做這種毫無技術(shù)含量的事情。那天下午我給自己定了個(gè)規(guī)矩任何需要做第二次的事情就必須有一條命令行能解決它。這其實(shí)就是CLI-Anything這個(gè)思路的起點(diǎn)。CLI-Anything不是什么驚天動(dòng)地的框架它是一套完整的方法論和工具箱核心理念就一句話——把你能想到的任何重復(fù)性工作、任何散落的腳本、任何需要通過瀏覽器和GUI才能完成的操作全部收斂成一條簡(jiǎn)潔、可復(fù)用、可參數(shù)化的終端命令。這個(gè)思路適合誰如果你是一個(gè)經(jīng)常和數(shù)據(jù)打交道的人比如數(shù)據(jù)分析師、后端開發(fā)、運(yùn)維、自動(dòng)化測(cè)試工程師甚至只是每天要批量處理文件、定時(shí)跑腳本、調(diào)用接口查數(shù)據(jù)的普通辦公族你都會(huì)從這套方法論里拿到實(shí)實(shí)在在的東西。和寫一個(gè)完整的帶界面的工具相比CLI的成本極低、學(xué)習(xí)曲線極陡、收益卻立竿見影而且天然適配腳本化、定時(shí)化、流水線化。我在這篇文章里不會(huì)講什么高深理論而是把我從零搭建CLI-Anything這個(gè)CLI框架的全過程、踩過的坑、最后沉淀下來的設(shè)計(jì)思路全部掰開揉碎。你可以直接照著做也可以把它當(dāng)成一個(gè)工具箱遇到類似問題就抄一段。2. CLI-Anything的骨架設(shè)計(jì)先想清楚這五件事很多人寫CLI工具的習(xí)慣是寫一個(gè)main.py里面塞一堆if __name__ __main__然后用sys.argv[1]判斷參數(shù)。這種寫法在腳本只有幾十行的時(shí)候沒問題但一旦命令多了、參數(shù)復(fù)雜了、要支持配置文件了代碼就會(huì)快速腐爛。我在設(shè)計(jì)CLI-Anything時(shí)第一步不是寫代碼而是把需求拆成五個(gè)必須解決的問題命令注冊(cè)、參數(shù)解析、輸出格式化、錯(cuò)誤處理、配置管理。這五個(gè)問題每一個(gè)都有成熟方案但把它們組合成一個(gè)順手框架需要一些思考。2.1 命令注冊(cè)機(jī)制為什么用裝飾器而不是字典CLI-Anything的第一個(gè)設(shè)計(jì)決策是命令注冊(cè)方式。我見過很多框架用字符串到函數(shù)的字典映射比如commands {list: cmd_list}。這在命令少的時(shí)候很直觀但每增加一個(gè)命令就要去改字典、維護(hù)別名、處理沖突而且沒法自動(dòng)生成幫助文檔。我最終選擇了裝飾器注冊(cè)方案。每個(gè)命令函數(shù)只要加上cli.command(namelist, alias[ls], desc列出所有任務(wù))就自動(dòng)完成了注冊(cè)。這樣做的三個(gè)好處新增命令只改一個(gè)文件里的一個(gè)函數(shù)幫助信息可以從裝飾器參數(shù)里自動(dòng)提取命令和函數(shù)的對(duì)應(yīng)關(guān)系一目了然代碼即文檔。裝飾器方案在團(tuán)隊(duì)協(xié)作時(shí)尤其有價(jià)值。新人想加一個(gè)命令不用理解整個(gè)框架的注冊(cè)鏈路只需要照著已有函數(shù)的寫法模仿即可不易出錯(cuò)review代碼時(shí)也能快速定位命令邏輯。# CLI-Anything 核心框架示意 class CLIAnything: def __init__(self, name: str): self.name name self._commands {} def command(self, name: str, aliasNone, desc): def decorator(func): self._commands[name] { func: func, alias: alias or [], desc: desc } if alias: for a in alias: self._commands[a] self._commands[name] return func return decorator def run(self, argv): if len(argv) 1 or argv[0] not in self._commands: print(self.help_text()) return 1 cmd self._commands[argv[0]] return cmd[func](argv[1:])2.2 參數(shù)解析不要讓用戶去猜參數(shù)解析是CLI工具用戶體驗(yàn)的分水嶺。同樣是傳一個(gè)日期參數(shù)設(shè)計(jì)得好的工具支持--start2025-01-01、--start 2025-01-01、-s 2025-01-01三種寫法設(shè)計(jì)得差的工具只認(rèn)python tool.py 20250101這種位置參數(shù)用戶記不住、輸錯(cuò)率高、報(bào)錯(cuò)信息還看不懂。我在CLI-Anything里引入了一套輕量參數(shù)規(guī)則每一個(gè)子命令可以聲明args.flag(name--path, short-p, requiredTrue, typestr, help文件路徑)然后框架自動(dòng)生成解析邏輯。底層其實(shí)封裝的是Python標(biāo)準(zhǔn)庫argparse但對(duì)外暴露的接口刻意簡(jiǎn)化了。為什么不用click或typer因?yàn)镃LI-Anything的定位是那些想快速把問題解決、又不太想引入重型依賴的人argparse和inspect標(biāo)準(zhǔn)庫完全夠用。參數(shù)設(shè)計(jì)有一個(gè)原則值得記住能提供默認(rèn)值就提供默認(rèn)值能不要求位置參數(shù)就不要求所有可能產(chǎn)生歧義的寫法都要在幫助文檔里寫清楚。命令行工具的每一次摩擦都會(huì)讓用戶放棄它轉(zhuǎn)回手動(dòng)操作。2.3 輸出與錯(cuò)誤處理的三個(gè)層次CLI工具的輸出我把它分成三個(gè)層次信息輸出、結(jié)構(gòu)化輸出、錯(cuò)誤輸出。很多人只做第一層導(dǎo)致工具只能給人看沒法被別的工具調(diào)用。信息輸出用普通print即可。結(jié)構(gòu)化輸出要支持--json和--table兩種模式機(jī)器調(diào)用時(shí)輸出JSON方便解析人眼查看時(shí)輸出對(duì)齊表格方便閱讀。錯(cuò)誤輸出則要統(tǒng)一走stderr并且返回非零退出碼這樣腳本才能捕獲到失敗。舉一個(gè)真實(shí)的反面案例。我曾經(jīng)寫過一個(gè)批量壓縮圖片的工具壓縮失敗時(shí)只是print(failed)然后繼續(xù)跑退出碼永遠(yuǎn)是0。后來它被接入定時(shí)任務(wù)連續(xù)失敗三天卻沒有觸發(fā)任何告警直到我手動(dòng)檢查日志才發(fā)現(xiàn)問題。從那以后CLI-Anything的錯(cuò)誤處理邏輯變成了硬規(guī)則任何失敗必須寫stderr、必須返回非零退出碼、必須附帶足夠上下文信息。2.4 配置管理環(huán)境變量、配置文件、命令行參數(shù)三層覆蓋CLI工具最容易被忽視的是配置管理。很多工具把所有參數(shù)都暴露在命令行上導(dǎo)致一條命令寫下來幾百個(gè)字符可讀性極差另一些工具則把所有配置寫死在代碼里換環(huán)境就要改代碼。我采用三層配置方案覆蓋優(yōu)先級(jí)從低到高分別是配置文件、環(huán)境變量、命令行參數(shù)。配置文件用YAML默認(rèn)放在用戶目錄下的.cli_anything.yaml環(huán)境變量用CLI_ANYTHING_前綴命令行參數(shù)權(quán)限最高直接覆蓋前兩層。這樣設(shè)計(jì)的原因是默認(rèn)值寫給初次使用者配置文件寫給常規(guī)使用者命令行參數(shù)寫給臨時(shí)覆蓋場(chǎng)景。關(guān)鍵參數(shù)比如API密鑰、數(shù)據(jù)庫地址不該寫進(jìn)配置文件應(yīng)優(yōu)先從環(huán)境變量或密鑰管理服務(wù)讀取。這個(gè)設(shè)計(jì)說說容易但它有一個(gè)隱藏收益接入CI/CD時(shí)可以通過環(huán)境變量注入絕大多數(shù)動(dòng)態(tài)配置根本不用去改代碼或配置文件這也為后續(xù)的流水線化打好了基礎(chǔ)。3. 用一個(gè)真實(shí)案例走通全流程把Excel對(duì)賬變成一行命令理論說再多不如一個(gè)完整的實(shí)操案例。我選擇的需求是Excel對(duì)賬因?yàn)樗趲缀跛泻蛿?shù)據(jù)打交道的崗位都會(huì)出現(xiàn)而且足夠典型涉及文件讀取、數(shù)據(jù)清洗、規(guī)則匹配、結(jié)果輸出、異常處理五個(gè)階段。原始需求是這樣的業(yè)務(wù)方每個(gè)月會(huì)發(fā)來一個(gè)Excel格式經(jīng)常不統(tǒng)一里面有訂單號(hào)、金額、時(shí)間。財(cái)務(wù)系統(tǒng)里有一份標(biāo)準(zhǔn)數(shù)據(jù)庫表。我們需要找到兩邊數(shù)據(jù)的差異——哪些訂單在Excel里有但系統(tǒng)里沒有哪些金額對(duì)不上然后輸出一份差異報(bào)告。以前的做法是人工打開Excel用VLOOKUP逐個(gè)核對(duì)一個(gè)月的對(duì)賬要花半天。3.1 需求拆解與邊界定義動(dòng)手寫代碼前我先把需求邊界畫清楚輸入是一個(gè)Excel文件路徑輸出是一份Markdown或CSV格式的差異報(bào)告核心匹配邏輯是訂單號(hào)相同但金額不同和Excel中存在但系統(tǒng)中不存在。其他的比如Excel格式的異常處理、重復(fù)訂單號(hào)的識(shí)別屬于加分項(xiàng)但作為隱性需求先記下來。這一步特別重要。CLI工具最容易失控的地方就是需求蔓延。如果你一開始就想把智能糾錯(cuò)自動(dòng)生成調(diào)整分錄這些功能都做進(jìn)去工具大概率幾個(gè)月都出不了第一版。我的原則是第一版只解決最痛的點(diǎn)其他需求記錄在--help里等真實(shí)用戶反饋再說。3.2 核心代碼實(shí)現(xiàn)核心邏輯分三步讀取Excel和數(shù)據(jù)庫歸一化字段做兩組比對(duì)。讀取Excel我用pandas.read_excel數(shù)據(jù)庫用sqlite3標(biāo)準(zhǔn)庫真實(shí)場(chǎng)景可以換成任何數(shù)據(jù)庫驅(qū)動(dòng)。字段歸一化的意思是把Excel里的日期從2025/1/1統(tǒng)一成2025-01-01把金額統(tǒng)一成兩位小數(shù)的float把訂單號(hào)統(tǒng)一成字符串去空格。這一步不做的話比對(duì)結(jié)果會(huì)出現(xiàn)大量假陽性。# 核心對(duì)賬邏輯 import pandas as pd import sqlite3 def load_data(excel_path: str) - pd.DataFrame: df pd.read_excel(excel_path, dtypestr) # 全部按字符串讀入保留原始格式 df[訂單號(hào)] df[訂單號(hào)].str.strip() df[金額] df[金額].astype(float).round(2) df[日期] pd.to_datetime(df[日期]).dt.strftime(%Y-%m-%d) return df def load_system_data(db_path: str) - pd.DataFrame: conn sqlite3.connect(db_path) df pd.read_sql_query(SELECT order_no, amount, date FROM orders, conn) conn.close() df[訂單號(hào)] df[order_no].str.strip() df[金額] df[amount].astype(float).round(2) df[日期] df[date].astype(str) return df def reconcile(excel_df, system_df): excel_set set(excel_df[訂單號(hào)]) system_set set(system_df[訂單號(hào)]) missing_in_system excel_df[~excel_df[訂單號(hào)].isin(system_set)] both excel_df[excel_df[訂單號(hào)].isin(system_set)] merged both.merge(system_df[[訂單號(hào), 金額]], on訂單號(hào), suffixes(_excel, _system)) amount_diff merged[merged[金額_excel] ! merged[金額_system]] return missing_in_system, amount_diff這段代碼看著簡(jiǎn)單但有一個(gè)經(jīng)驗(yàn)點(diǎn)是很多人踩過的dtypestr和astype(float)的順序不能顛倒。如果先轉(zhuǎn)float再轉(zhuǎn)str金額會(huì)變成1234.0和數(shù)據(jù)庫里的1234字符串對(duì)不上產(chǎn)生一堆莫名的差異。我的習(xí)慣是全部數(shù)據(jù)先按字符串讀入各自完成清洗后再在比對(duì)階段轉(zhuǎn)為統(tǒng)一類型。3.3 從腳本到成品三件不能省的小事有了核心邏輯后要把它變成真正能用的CLI工具還有三件事不能省封裝成子命令、增加--output參數(shù)、加入日志與退出碼。封裝成子命令意味著這個(gè)對(duì)賬邏輯在CLI-Anything里注冊(cè)為reconcile命令可以通過cli-anything reconcile --excel path/to/file.xlsx --db data.db --output diff.csv來調(diào)用。參數(shù)解析器負(fù)責(zé)校驗(yàn)文件是否存在、輸出目錄是否可寫如果校驗(yàn)失敗工具直接以清晰的報(bào)錯(cuò)信息停住而不是等代碼跑到一半才拋異常。--output參數(shù)給了用戶選擇輸出到終端還是寫入文件。寫入文件時(shí)我默認(rèn)同時(shí)輸出Markdown格式的人讀報(bào)告和CSV格式的機(jī)器讀報(bào)告。Markdown報(bào)告放在同目錄下的diff_report.md方便直接貼到周報(bào)里CSV報(bào)告供后續(xù)腳本繼續(xù)處理。日志方面分了三級(jí)正常流程打印進(jìn)度、數(shù)據(jù)量統(tǒng)計(jì)異常情況打印具體原因和建議動(dòng)作最嚴(yán)重的情況比如文件不存在、數(shù)據(jù)庫連接失敗打印ERROR: ...并返回退出碼2腳本可以通過$?判斷成功與否。3.4 實(shí)測(cè)效果對(duì)比這版工具做完后我拿上個(gè)月的真實(shí)數(shù)據(jù)測(cè)試Excel里有約3600條記錄數(shù)據(jù)庫里有3400條雙方各有約200條對(duì)方?jīng)]有的記錄還有約50條金額對(duì)不上的記錄。整個(gè)對(duì)賬從人工的半天壓縮到了原地執(zhí)行命令的0.8秒。這個(gè)數(shù)字帶來的實(shí)際改變是巨大的。以前每個(gè)月月底財(cái)務(wù)要預(yù)留半天專門做對(duì)賬現(xiàn)在只需要把月度Excel文件拖進(jìn)指定目錄執(zhí)行一條命令幾分鐘內(nèi)拿到報(bào)告。更重要的是這個(gè)過程從人工不可重復(fù)變成了每次結(jié)果都可復(fù)現(xiàn)、可審計(jì)——任何人運(yùn)行同一條命令得到的報(bào)告完全一致這就為財(cái)務(wù)審計(jì)和自動(dòng)化留出了空間。4. 把CLI-Anything推向真實(shí)場(chǎng)景數(shù)據(jù)源、流水線與自動(dòng)化第一個(gè)案例跑通后CLI-Anything的價(jià)值自然就延伸出來了。你不可能只做一個(gè)孤立的命令現(xiàn)實(shí)世界里工具之間是要協(xié)作的。這個(gè)階段我主要做了三件事讓工具能讀真正的數(shù)據(jù)庫和API、讓多個(gè)命令能串成流水線、讓工具能掛在定時(shí)任務(wù)和CI/CD里。4.1 讓CLI工具讀數(shù)據(jù)庫而不是讀CSVExcel對(duì)賬只是起點(diǎn)。很快我發(fā)現(xiàn)很多任務(wù)的數(shù)據(jù)源根本不在Excel里而在數(shù)據(jù)庫里。比如我要定期檢查線上訂單表和日志表的差異或者從支付接口拉取對(duì)賬單。CLI-Anything的做法是為每個(gè)命令提供統(tǒng)一的--db-url參數(shù)支持SQLite、PostgreSQL、MySQL三種數(shù)據(jù)庫連接串。具體實(shí)現(xiàn)并不復(fù)雜用SQLAlchemy作為統(tǒng)一入口配置好連接池和超時(shí)參數(shù)。這樣做的好處是命令內(nèi)部不需要關(guān)心連接的是哪類數(shù)據(jù)庫邏輯集中在數(shù)據(jù)清洗和比對(duì)上面。數(shù)據(jù)庫連接串的傳遞方式我建議走環(huán)境變量而不走命令行參數(shù)否則在ps查看進(jìn)程時(shí)數(shù)據(jù)庫密碼會(huì)直接暴露。這也是上一節(jié)說的配置分層原則的一個(gè)具體應(yīng)用。# 典型調(diào)用示例 export DB_URLpostgresql://readonly_user:****10.0.0.5:5432/orders cli-anything reconcile --excel monthly_202501.xlsx --db-url $DB_URL --output diff.csv4.2 把多個(gè)CLI工具串成一條流水線真正的進(jìn)階是命令的組合。CLI工具如果只支持人手動(dòng)執(zhí)行那么價(jià)值有限如果支持A | B | C這樣的管道式組合就能進(jìn)入自動(dòng)化的工作流。我在CLI-Anything里給每個(gè)命令設(shè)計(jì)了兩個(gè)IO承諾標(biāo)準(zhǔn)輸出支持--json結(jié)構(gòu)化格式所有子命令都從stdin讀取JSON數(shù)組作為輸入?;谶@個(gè)約定你可以做這樣的事# 從數(shù)據(jù)庫拉取待處理訂單過濾掉已關(guān)閉的再批量加標(biāo)簽 cli-anything fetch-orders --statusopen | cli-anything filter --fieldstate --notclosed | cli-anything tag --tagnew-order這個(gè)設(shè)計(jì)的靈感來自Unix哲學(xué)一個(gè)工具做一件事把復(fù)雜任務(wù)拆成多個(gè)工具的協(xié)作。它的副作用是每個(gè)命令都必須保持無狀態(tài)——不在內(nèi)部保存中間結(jié)果數(shù)據(jù)通過管道流動(dòng)。這在一開始寫起來略麻煩但長(zhǎng)期收益很大因?yàn)檎{(diào)試和橫向擴(kuò)展都變得簡(jiǎn)單了。4.3 定時(shí)任務(wù)與CI/CD集成有了可以被管道串聯(lián)的CLI工具下一步自然是定時(shí)化。我用crontab做簡(jiǎn)單的每日巡檢用GitHub Actions做每周的自動(dòng)化報(bào)告生成。這里有一個(gè)關(guān)鍵坑CLI工具在cron里跑和在人手里跑環(huán)境變量、當(dāng)前目錄、PATH都可能不同所以工具本身必須做到不依賴隱式環(huán)境。我的做法是所有路徑參數(shù)都要求顯式傳遞不依賴當(dāng)前目錄日志明確寫入stderr并帶有時(shí)間戳輸出文件名默認(rèn)時(shí)間戳格式防止覆蓋工具啟動(dòng)時(shí)主動(dòng)檢查關(guān)鍵配置項(xiàng)是否缺失缺失就快速失敗。這些設(shè)計(jì)都是為了無人值守場(chǎng)景。# crontab 示例每個(gè)工作日上午9點(diǎn)自動(dòng)對(duì)賬 0 9 * * 1-5 cd /opt/scripts cli-anything reconcile --excel /data/reports/$(date \%Y\%m\%d).xlsx --db-url $DB_URL --output /data/reports/diff_$(date \%Y\%m\%d).csv /var/log/cli-anything.log 215. 實(shí)操中踩過的五個(gè)坑寫給準(zhǔn)備動(dòng)手的你CLI工具雖然看起來簡(jiǎn)單但實(shí)際開發(fā)中有不少隱藏陷阱。我在CLI-Anything的開發(fā)過程中先后踩過以下幾類每一個(gè)都花費(fèi)了不少時(shí)間排查寫出來幫大家避開。5.1 坑一Windows環(huán)境下的編碼地獄CLI工具在macOS和Linux下表現(xiàn)正常換到Windows Terminal里就出現(xiàn)中文亂碼。根因通常是Windows默認(rèn)使用GBK編碼而Python默認(rèn)輸出UTF-8。解決方案是程序啟動(dòng)時(shí)顯式執(zhí)行sys.stdout.reconfigure(encodingutf-8)同時(shí)要求用戶在PowerShell里先執(zhí)行$OutputEncoding [System.Text.Encoding]::UTF8。這個(gè)坑在團(tuán)隊(duì)協(xié)作時(shí)尤其隱蔽。某個(gè)人在Mac上開發(fā)測(cè)試沒問題交付給Windows用戶后就一堆亂碼對(duì)方還以為工具壞了?,F(xiàn)在我把編碼處理寫進(jìn)了CLI-Anything的啟動(dòng)函數(shù)從根源上杜絕了這個(gè)問題。5.2 坑二參數(shù)設(shè)計(jì)過度靈活反而沒人用剛開始設(shè)計(jì)參數(shù)時(shí)我總想反正容易實(shí)現(xiàn)就多提供幾種寫法。于是一個(gè)命令支持七八個(gè)參數(shù)每個(gè)參數(shù)還有兩三種別名。結(jié)果是幫助文檔接近兩千字用戶看兩行就放棄了最后還是手動(dòng)操作。后來我砍參數(shù)砍到只剩三個(gè)必填參數(shù)加上兩個(gè)可選的--output和--verbose工具的采用率才真正上來。參數(shù)設(shè)計(jì)的本質(zhì)是約束而不是方便只有高頻變更的維度才應(yīng)該暴露成參數(shù)其他統(tǒng)統(tǒng)做成合理的默認(rèn)值埋在配置文件里。5.3 坑三測(cè)試缺失導(dǎo)致上線翻車CLI工具看起來代碼量不大很多人就不寫測(cè)試。我的切身體會(huì)工具越簡(jiǎn)單越應(yīng)該在測(cè)試上花心思因?yàn)槟愕暮诵倪壿嬘脩裘刻於家蕾囁淮屋敵鲥e(cuò)誤可能造成比預(yù)期大得多的連鎖問題。CLI-Anything從一開始就要求每個(gè)命令至少包含兩組測(cè)試正常流程測(cè)試和異常流程測(cè)試。異常流程測(cè)試?yán)镏辽俑采w文件不存在字段缺失類型轉(zhuǎn)換失敗三種情況。測(cè)試代碼量可能跟業(yè)務(wù)代碼相當(dāng)?shù)看胃膭?dòng)后跑一遍測(cè)試帶來的安心感值回票價(jià)。# 測(cè)試示例簡(jiǎn)化版 def test_reconcile_with_missing_file(): runner CliRunner() result runner.invoke(app, [reconcile, --excel, not_exist.xlsx]) assert result.exit_code 2 assert 找不到文件 in result.stderr def test_reconcile_with_amount_diff(tmp_path): # 構(gòu)造兩份有差異的數(shù)據(jù)斷言輸出報(bào)告包含差異 ...5.4 坑四依賴第三方庫版本把自己綁死我之前做工具時(shí)不加鎖版本直接寫pandas1.0。直到某一天客戶環(huán)境里裝的是pandas 2.0read_excel的行為略有變化導(dǎo)致工具靜默輸出錯(cuò)誤報(bào)告。從那以后所有頂層依賴都要寫明版本區(qū)間并在requirements.txt里鎖定已驗(yàn)證版本且升級(jí)依賴必須跑完整測(cè)試套件。5.5 坑五文檔沒跟上工具等于白做CLI工具最容易被忽略但最影響使用的環(huán)節(jié)是文檔。我見過非常多工具功能完整、代碼優(yōu)雅但打開--help只看到幾行干巴巴的字符串用戶根本不知道輸入什么。我給CLI-Anything寫了一個(gè)自動(dòng)文檔生成器每一個(gè)命令的裝飾器參數(shù)、參數(shù)規(guī)則、默認(rèn)值會(huì)自動(dòng)生成一份Markdown格式的簡(jiǎn)短說明放到docs/commands.md下。同時(shí)每個(gè)命令都強(qiáng)制提供至少一個(gè)示例哪怕只有一行。在使用頻率最高的前三個(gè)命令里我還加上了典型場(chǎng)景幾個(gè)字告訴用戶這個(gè)命令通常解決什么問題。6. CLI工具的下一步演進(jìn)從解決問題到沉淀平臺(tái)當(dāng)CLI-Anything里面已經(jīng)有十幾個(gè)命令之后我明顯感覺到了量變到質(zhì)變工具本身已經(jīng)不是重點(diǎn)重點(diǎn)是它沉淀下來的那套可復(fù)用能力。這里我想聊三個(gè)值得繼續(xù)深挖的方向。6.1 讓工具的對(duì)話接口更友好終端工具的一個(gè)麻煩是用戶要記住命令名和參數(shù)名。我現(xiàn)在在做的事情是在CLI-Anything上套一層自然語言轉(zhuǎn)命令的輕量交互輸入對(duì)一下上個(gè)月的賬單工具內(nèi)部把這句話映射到reconcile --excel monthly_latest.xlsx這條命令。這不要求什么高深的AI能力做一個(gè)基于正則和關(guān)鍵詞的規(guī)則引擎就夠解決80%的高頻需求。其實(shí)不少團(tuán)隊(duì)已經(jīng)在做更激進(jìn)的方案直接讓大語言模型理解用戶意圖生成參數(shù)并調(diào)用CLI工具。這本質(zhì)上就是把CLI-Anything當(dāng)作一個(gè)可被AI調(diào)用的動(dòng)作庫——當(dāng)你的工具命令和參數(shù)足夠規(guī)范時(shí)AI才能準(zhǔn)確調(diào)用它。這反過來驗(yàn)證了好的CLI設(shè)計(jì)有多重要。6.2 把CLI工具變成團(tuán)隊(duì)共享的中臺(tái)能力CLI工具不該是某個(gè)人的私人腳本而應(yīng)該成為團(tuán)隊(duì)共享的命令行平臺(tái)。我現(xiàn)在在CLI-Anything里做了一個(gè)命令目錄功能列出所有可用命令、使用頻率、最近更新時(shí)間。任何團(tuán)隊(duì)成員只要安裝這個(gè)包就能看到團(tuán)隊(duì)積累的工具全集——這比藏在各自電腦里的腳本強(qiáng)得多。在這個(gè)方向上的一個(gè)具體實(shí)踐是我把CLI-Anything的包發(fā)布到公司內(nèi)部的私有倉庫通過一條pip install命令完成安裝然后在doc里告訴大家所有命令見cli-anything --list。發(fā)布之后團(tuán)隊(duì)里其他部門的人開始提交新命令進(jìn)來工具集合從個(gè)人項(xiàng)目變成了真正的公共基礎(chǔ)設(shè)施。6.3 關(guān)于CLI工具性能的最后一個(gè)提醒最后提醒一點(diǎn)CLI工具的單次執(zhí)行性能無需過度優(yōu)化因?yàn)橛脩舾兄蠲黠@的是啟動(dòng)時(shí)間和輸出可讀性。如果你的Python工具啟動(dòng)要兩秒可以考慮用uv或加快啟動(dòng)的方案降低延遲。但如果單次任務(wù)本身要跑幾十秒那瓶頸基本在數(shù)據(jù)讀取和清洗上單獨(dú)優(yōu)化CLI框架本身并沒有意義。我見過太多人在糾結(jié)0.1秒的解析時(shí)間卻對(duì)底層數(shù)據(jù)讀取的10秒瓶頸視而不見。# 一條命令查看所有已注冊(cè)的命令以及它們最近一次使用時(shí)間 cli-anything stats --command-list --sort-bylast_used7. 幾個(gè)細(xì)節(jié)技巧補(bǔ)充讓你的CLI工具立刻提升一個(gè)檔次文章到這里核心框架和案例都講完了。我再補(bǔ)充幾個(gè)零散但實(shí)用的技巧這些都是我在使用CLI-Anything時(shí)一點(diǎn)點(diǎn)積累起來的每一個(gè)都能立刻改善使用體驗(yàn)。7.1 進(jìn)度條和日志是兩回事CLI工具處理大批量數(shù)據(jù)時(shí)如果長(zhǎng)時(shí)間無輸出用戶很容易誤以為程序卡死了。給耗時(shí)操作加上進(jìn)度條是一個(gè)極好的體驗(yàn)優(yōu)化但進(jìn)度條和日志不能混在一起輸出。日志要走stderr進(jìn)度條走stdout且定期刷新——混在一起會(huì)讓管道數(shù)據(jù)被污染破壞機(jī)器可解析性。7.2 善用退出碼表達(dá)錯(cuò)誤類型很多人不知道退出碼本身也是CLI工具接口的一部分。我定了一個(gè)簡(jiǎn)單的規(guī)范0表示成功1表示業(yè)務(wù)邏輯處理失敗比如對(duì)賬有差異、過濾后無數(shù)據(jù)2表示參數(shù)或環(huán)境錯(cuò)誤。之所以區(qū)分業(yè)務(wù)失敗和參數(shù)錯(cuò)誤是因?yàn)樽詣?dòng)化腳本可以根據(jù)退出碼決定下一步動(dòng)作——業(yè)務(wù)失敗可能只需要發(fā)告警參數(shù)錯(cuò)誤則意味著要修配置。7.3 為每個(gè)命令保留調(diào)試模式CLI工具在用戶端運(yùn)行和在開發(fā)端運(yùn)行面臨的環(huán)境差異很大。CLI-Anything里每個(gè)命令都支持--debug參數(shù)開啟后會(huì)在命令開頭打印環(huán)境信息Python版本、平臺(tái)、關(guān)鍵配置項(xiàng)并在執(zhí)行完成后打印耗時(shí)統(tǒng)計(jì)。用戶報(bào)bug時(shí)直接讓他跑一遍--debug很多問題不用我親自復(fù)現(xiàn)就能定位。7.4 用--dry-run讓危險(xiǎn)命令有后悔藥批量刪除、批量修改這類破壞性命令在真正執(zhí)行前先讓用戶看一遍將要做什么是非常重要的。CLI-Anything的規(guī)范是破壞性命令必須實(shí)現(xiàn)--dry-run參數(shù)默認(rèn)值甚至可以是只打印不執(zhí)行用戶顯式傳--force才真正動(dòng)手。這個(gè)設(shè)計(jì)救了我好幾次——有一次--dry-run顯示要?jiǎng)h除的記錄數(shù)量遠(yuǎn)超預(yù)期仔細(xì)檢查才發(fā)現(xiàn)是過濾條件寫錯(cuò)了一位。7.5 保持向后兼容但用棄用警告引導(dǎo)遷移CLI工具一旦用了就別輕易改接口但完全不動(dòng)也不行。我之前改過一個(gè)命令的參數(shù)名結(jié)果接在自動(dòng)化流水線里的腳本靜默失敗了。現(xiàn)在我的做法是舊參數(shù)保留但每次調(diào)用都在stderr打一行棄用警告提示新參數(shù)的寫法并在文檔里標(biāo)注預(yù)計(jì)移除版本。這樣既給了用戶緩沖期也讓工具始終在向前演進(jìn)。8. 最后的建議從今天開始把下一個(gè)重復(fù)勞動(dòng)變成命令這篇文章從CLI-Anything的設(shè)計(jì)動(dòng)機(jī)開始講述了命令注冊(cè)、參數(shù)解析、配置管理、輸出錯(cuò)誤處理等骨架設(shè)計(jì)用一個(gè)Excel對(duì)賬的完整案例走通了從腳本到CLI的改造流程又延伸到流水線、定時(shí)任務(wù)、團(tuán)隊(duì)共享平臺(tái)這些進(jìn)階方向。最后分享的五個(gè)坑和五個(gè)細(xì)節(jié)技巧都是我自己真金白銀換來的經(jīng)驗(yàn)。如果你讀完只記得一件事我希望是這句話任何做過兩次以上的事情都值得一條命令把它自動(dòng)化掉。CLI-Anything本質(zhì)上不是某個(gè)具體工具而是一種思維方式——把重復(fù)交給程序把自己從機(jī)械勞動(dòng)里解放出來去做那些真正需要判斷力和創(chuàng)造力的工作。根據(jù)我個(gè)人經(jīng)驗(yàn)最好的切入點(diǎn)是去找那個(gè)你每周都會(huì)做、但每次都要花半小時(shí)以上的手工任務(wù)。它可能是一個(gè)Excel整理、一組文件重命名、一次接口數(shù)據(jù)比對(duì)那么現(xiàn)在就可以打開編輯器用CLI-Anything的思想把這個(gè)任務(wù)變成你的第一條命令。不要試圖一開始就做一個(gè)完美的大框架。CLI工具的魅力就在于它是被使用逼出來的命令跟著真實(shí)需求長(zhǎng)出來——今天加一個(gè)fetch-orders明天加一個(gè)bulk-tag半年之后回頭看你會(huì)驚訝于自己已經(jīng)擁有一套順手的工作流了。這就是CLI-Anything帶給我的最大改變那些瑣碎的、重復(fù)的、讓人疲憊的操作終于都變成了我手中的一條條命令。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲激情网站无码| 我爱大香蕉| 色播激情| 丁香激情五月| 夜夜躁婷婷AV| 亚洲激情97五月天| 欧美婷婷五月激情| 91欧美日韩综合| 成人国产欧美大片一区| 色五月综合| 少妇人妻丰满做爰XXX| 99精在线| 艹| 骚五月婷婷| 96精品成人无码A片观看金桔| 激情综合五| 六月婷婷色五月| 色色色地址| 九八Av| 日本熟妇精品99| 色婷婷五月天小说网| 日韩成人AV在线| 久久ri精品视频| 色色色色综合网| 激情综合色播| 呦呦视频无码播放| 亚洲啪啪网| 久久大香蕉丁香| 97碰在线| 激情综合无码| 色婷丁香| 思思热99热| 婷婷社区五月天| 日逼免费视频| 99热精品9| 久久久久久激情| av免费在线观看0| 午夜五月天| 青青草成人网| 五月欧美丁香在线观看| 99热8| 亚洲激情综合五月婷婷啪啪| www,五月天激情| 久久精品性爱视频,| 亚洲AV人人操| 婷婷精品免费久久| 97五月天| 五月婷婷综合激情网| www色五月| 99丁香五月婷| 色婷婷五月天中文字幕| 成人超碰AV| 九热视频精品| 久久九九爽| www.91九色| AV大片在线观看| 婷婷五月天堂| 免费观看欧美成人AA片爱我多深| 丁香网五月天| 五月天婷婷涩涩| 激情五月天婷婷播播久久综合91| 丁香影院五月综合| 五月婷婷婷综合网| 九热视频| 日在线V视频在线播放| 久1色色| 69精品人人人人| 国产精品成人在线| 亚州激情在线视频| 亚洲情a| 激情婷婷色五月| 天天综合网亚洲综合网| 激情噜噜噜| 色婷婷综合网| 五月婷婷激情综合| 九九精品9| OYIWbGcPu8H| 大香蕉在线99热| 99热热热99精品婷婷| 亚洲亚洲人成综合网络| 超碰免费人人肏| 91干99| 久久sp免费视频| 五月停停999| 久久久99久久| 丁香五月,激情五月,深爱五月| 日日日日操| 夜夜爱网站| 色五月婷婷五月天| 中文字幕在线免费看线人| 欧美成人AAA片一区国产精品 | 婷婷丁香高潮了| 天天干,噜噜色,狠狠色| 五月开心网| 99re久久| 婷婷五月综合基地| 丁香五月天天哦| 美臀自射自家人妻| 六月撸婷婷| 日韩久热| 五月天天丁香婷婷| 91超级碰| 欧美婷婷成人| 五月天婷婷在线AN| 亚洲第一影院高清无码网站| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | caopeng97日韩| 五月婷婷说| 丁香五月激情网| 五月丁香激情综合| 五月丁香啪啪综合网| Av性爱网站| 五月天激情美女久久| 激情五月色婷婷| 91精品久久久久久综合五月天| 国产XXXX搡XXXXX搡麻豆 | 、激情六月天| 成人电影AV在线观看| 99热9999| 五月丁香最新| 婷婷五月丁香久久| 国产在线aaa片一区二区99| 一级无码作爱片| 色综合网上班开心婷婷久久| 99精品视频偷拍| 天天插天天插天天插天天插| 丁香五月婷婷激情尤物| 99在线精品视频在线观看| 啪啪啪大香蕉| 99久热在线精品| 亚洲 五月 婷婷 成人| 色玖玖综合网| 一区视频网站| 五月婷婷丁香综合| 久久综合26p| 日本九婷婷| 亚洲最大激情无码| 日本波多野结衣视频| 丁香五月天堂网| 俺也去在线视频| 狠狠综合网| www.com色播五月天| 丁香五月天无码AV| 亚洲AV成人片无码网站| 久久久婷婷色五月资源网| 综合五月草 | 人人看人人草人人摸| www.99热在线观看| 欧美久久网| 淫荡综合网| 成人av免费观看| 国外亚洲成AV人片在线观看| 九九操操| 丁香五月天堂网| 婷婷五月激情的图片| 狠狠色噜噜狠狠| 97久久人人人干| 婷婷久久欧美| 久久在线视频免费观看| 天天日婷婷| 亚洲中文字幕在线观看| er99免费视频在线| 九九热内射| 婷婷丁香五月天小说| 久久丁香| 亚洲人成人五月天| 久久思思99| 伊人久久五月天综合| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 日韩二区搞逼插逼毛片| 可以观看的AV| 激情99热| 99在线精品视频| 伊人网大香| 五月丁香花成人社区| 狠狠操天天操| 欧美日本韩国亚洲| 五月丁香狠狠| 欧美三级视频下载| 亚洲人人操| 国产婷婷五月| 97热精品| 永久的网站AAAA| 色99色| 国产九九一区二区三区| 玖玖爱综合网| 久久只有这里精品免费| 99色色| 六月激情婷婷色| 思思热在线播放| 噜噜干日本| 婷婷内射视频在线| 美女va| 99精彩视频| 99热这里只有精品55| 伊人久久婷婷| 色偷偷AV亚洲男人的天堂| 这里只有精品日韩精品| 亚洲国产网址| 久久久大香蕉| 五月情丁香色| 日逼影音先锋AV男人资源站| 激情人妻综合| 五月丁色AV| 国产精品18久久久| 伊人AV五月婷| 婷婷五月天丁香激情| 精品丁香五月天在线播放| 青青日韩| 99热这里有精品| va婷婷在线| 五月丁香啪啪网| 婷婷国产日本欧美| 免费观看2018www黄色操逼网站| 狠狠操.COM| AV中文字幕夜夜操b天天摸bb| 婷婷色婷婷| 激情99热| 久99婷婷色综合| 26uuu亚洲| 五月久久网| 久久六月综合| 热99AV网站| 中文精品在| 久久免费精彩视频| 五月天基地| 九九综合图片网| 狠狠香蕉| SESE无码AV| 9久热免费视频99| 亚洲中文字幕网| 久色网五月| 色噜噜97视频在线观看| 色婷婷五月综合激情中文字幕| 思思热精品在线| 久久女婷| 五月丁香色综合| 色婷婷99| 婷久久高清| 久久久久网站| 99热在线免费| 丁香六月av| 亚洲免费成人电影AV| 99在线视频播放| 久久er九九| 丁香五月婷婷综合91| 夜夜干夜夜操| 婷婷欧美| 丁香五月六月激情| 天天色一道本综合婷婷| 九九色99| 久热久操久热久草国产91| 香蕉综合网| 66成人网| 亚洲狠狠狠| 色综合网上班开心婷婷久久| 伊人九九热| 婷婷激情社区| 婷婷六月天天| 久久人妻高清中文| 欧美日韓成人亚洲精品另类| 操B五月天| 五月婷A V在线| 99自拍视频网站| 开心婷婷五月中文字幕组| 婷婷久久五月| 国产资源在线视频| wwww.色婷婷| 丁香五月天啪啪| 久久婷网| 五月婷婷激情网| 五月九九综合| 久久小说网| 天天肏视频| 天天插插天天| 99视频在线| 婷婷性爱无码视频| VA国产在线综合网站| 热五月婷婷| 色婷婷色丁香色欲av| 97五月天| 99色热| 色99日韩| 色三级色三级| 婷婷精品免费久久| 色婷婷大香蕉| 五月丁香色色| 国产亚洲色婷婷久久99精品91| 五月天婷婷在线AN| 五月丁香六月婷婷综合网站 | 国产色五月| 丁香六月 婷婷六月| 猫咪伊人久久| 久操婷婷| www.夜夜操.con| 97色婷婷| caopeng超碰| 99热91| 新97人人上人人| 91肏| 9.1综合网| 996精品热视频| 日韩无码性爱| 99九九热在线观看| 激情小说五月天社区丁香 | 精品国产乱码久久久久夜深人妻| 久久99国产综合精品免费| 97啪啪| 婷婷丁香久久五月综合| 狠狠五月天婷婷激情网。| 日本精品。999| 亚洲婷婷丁香五月在线| 色国产五月| 婷婷丁香五另类网站| 五月婷高清视频| 天天草婷婷五月| sS丁香五月婷婷| 亚洲色色在线| 色婷婷五月天天天干天天操天天爽| 日逼免费视频| 噜噜视频| 五月天综合婷婷| 中文AV网| 中文字幕 中文字幕明步| 丁香五月花| 欧美一级a| 五月做爱| 91超碰在线播放| 久久98| 激情熟女网| 99极品视频| 色综合伊人网| 久久综合九色综合88i| 色婷婷中文在线| 偷拍视频五月天| 久久六月天| 大鸡巴伊人网| 六月五月婷婷| 婷婷婷婷婷婷婷婷婷婷丁香| 亚洲精99| 色色国产| 日韩草草草草草草草草草草草草| A A色色| 丁香婷婷基地| 91无码一起草| 色婷婷色情| 色五月成人| 色综合久网| AⅤ色区| 天天操天天干天天日| 激情婷婷网| 久久九九99亚洲国产久精综合| 人妻人人操| 六月成人网| 9.1综合网| 丁香六月色婷婷| 一级性感毛片| 亚洲婷婷五月天激情| 苗黎美女四级成人版一级二级毛片| 亚洲激情综合网| 天天摸天天做天天爱天天爽| www.九月婷婷丁香.com| 亚洲va欧洲va国产va不卡| 久久在线视频免费观看| 丁香5月啪啪| 激情内射人妻1区2区3区| 综合久久婷婷五月丁香| 91日韩在线| 久久婷婷夜| 99热这里只有精品1| 丁香狠狠色婷婷久久无码视频| 99热这是里只有精品| www99在线观看视频| 9视频在线成人网站| 久久久人妻久久久| 黄色五月婷婷| 天天干,天天操,天天射| 欧美人人操| 五月 成人 婷婷| 狠狠狠狠狠狠色| 亚洲天堂大香蕉| 站长推荐无码播放| 欧美日韩成人在线| 性做久久久久久久免费看| 热久久思思热思思| 波多野结衣不卡AV| 夜夜撸日日操| 另类激情五月天。| 夜夜嗨一区二区三区直播内容| 色婷婷五月影视| 丁香五月天激情综合| 狠狠擼综合| 超碰在线免费观看日韩| 久久性爱视频网站| 婷婷综合激情| 亚洲日韩久久婷婷伊人| 婷婷五月中文字幕国产| 色综合狠狠色| 色啪网| 日日夜夜噜噜爽爽| 人人操超碰| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 亚洲宗合激情| 夜夜干 夜夜操| WWW免费视频碰碰碰碰| 丁香五月在线自慰| 操逼福利视频| 天天操婷婷| 婷婷99狠狠躁天天躁中| 丁香五月天婷婷久久综合| 色情网综合| 91丨九色丨丰满人妖| 激情综合综合综合| 丁香六月激情综合网| 99精品在线| WWW.桔色成人.COM入口| 天堂二区| 五月激情影院| 香蕉婷婷色五月| 五月丁香中文婷婷中文| 国产人妻人伦精品一区二区| 久久色五月天| 五月天激情子轮| 九九99免费视频| 色综色网| 日本三级韩三级99久久| 五月天婷网| 丁香九月激情| 欧美人人女女精品综合五月天| 久久99网站| 丁香六月情| 激情美女五月天| 97成人在线视频精品| 搡BBBB搡BBB搡18| 五月天色不卡| 丁香五月六月激情| 精品国产va久久久久| 色青五月天| 狠狠干狠狠干| 成人AV在线电影| 俺去也五月天婷婷| 丁香五月激情视频在线| 亚洲色色在线| 色色综合成人网| 大香蕉Av在线| 丁香9月婷婷| 久/久精品99看9| 五月丁香六月婷婷在线观看| 开心综合激情综合| 五月婷婷和六月| 九九黄色网| 人人操操| 色五月婷婷伊人| 久久婷婷五月天| 五月丁香成人| AV操逼网| 婷婷五月天激情基地| 五月天激情在线视频| 99人碰碰碰| 99五月婷| 免费人人操| 成人片在线免费看| 成人小说色图婷婷五月| 欧美日本不卡黄色片| 熟女人妻一区二区三区免费看| 97婷婷色| 九九热超碰| 久久五月激情综合| 国产在线黄色| 日本色色色| 99无码超碰| 国产97色在线| 狠狠色婷婷7777久| 99视频精品| 五月丁香六月激情在线| 97av在线视频| 疯狂做受XXXX高潮A片动画| 99热最新| 九九热精品| 99热在线观看| 五月天激情国产综合婷婷婷| 六月丁香婷| 久久作爱| 天天插天天插| 超碰在线网站9| 无码成人AAAAA毛片AI换脸| 国外亚洲成AV人片在线观看| 这里只有精品96| 丁香五月婷婷综合激情哟哟哟| 99久操视频| 国产特黄色精品一区二区三区精品无广告 | 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 97操在线视频| 蜜臀av无码久久久久久久久| 青青福利网| 999影院成人在线影院| 婷婷五月天狠狠| 婷婷五月丁香色情| 色婷婷久久综合久色综| 色色吧综合| 天天综合网91| 亚洲精品无AMM毛片| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 能看的AV| 欧美人人超级碰| 综合色网站| 超碰免费人人| 这里只有精品在线看| 五月天成人综合| 开心婷婷中文字幕| 色婷婷欧美| 91性高潮久久久久久久久| 免费观看的av| 久激情| 91天天操天天干天天射| 色婷五月丁香久亚洲| 五月综合婷婷五月| www激情| 色色网站日本91| 9久国产| 中文字幕丁香五月| 超碰9| 亚洲精品V天堂中文字幕| ...婷婷五月综合不卡,国产在线手机| 久久综合这里只有精品1| 三级大香蕉网| 99热激情| 色哟哟性爱av| 午夜电影网VA内射| 亚洲色视频| 国产精品 的国产| 中文字幕丰满乱孑伦无码专区 | 天天干天天爽天天爽| 欧美精品啪啪| 色碰97| 五月情丁香色| 婷婷97碰碰| 久久看九九90| 久久亚洲网| 色色网站免费| 六月婷婷中文字幕| 色XX综合网| 丁香综合| 九九AV| 久久大大香| 玖玖精品婷婷| 欧美激情综合色丁香婷婷五月天| 991精品在线视频| 1024在线一区| 3pAV| 老司机日日夜夜青草| 国产欧美日韩综合精品一区二区| 五月婷婷基地| 久超超碰| 天堂呦 呦百度搜索-百度搜索| jiqingtaose五月天| 丁香婷婷影院| 五月婷婷亚洲综合在线 | 九九这里精品| 成人精品视频99在线观看免费| 婷婷五月综合色拍| 欧美综合在线五月天色婷婷| 天天天天操| 欧美色婷婷| 女人被男人吃奶到高潮| 丁香六月色| 思思热国产| 青青草视频免费观看| 五月丁香综合啪啪| 五月天伊人| www超碰| 色99热| 99久久综合狠狠综合久久| 久婷| 五月天com| 久久久激情视频| 九九色欲网| 日韩成人电影在线播放| 在线看片av| 五月丁香六月婷婷成人| 久久六月天| 狠狠se| www.久热| 婷婷五月香蕉| 激情五月婷黄版| 91婷婷在线观看| 婷婷刺激综合| 五月香婷婷| 思思久久精品| 99视频这里只有免费精品| 日本三级大片| 天天激情夜夜干| 最近中文字幕大全免费版在线 | 天天射天天射一道本日本社区| 色婷网| 天天做天天要天天爱| 成年人最刺激的综合网| aa久久| 婷婷五月婷婷| 热这里| 五月激情久久| 99热99色| 26UUU亚洲欧美| 北条麻妃伊人| 黄网免费看| 九九色中文| 色偷偷AV亚洲男人的天堂| 五月丁香黄色| 91色在线| 99这里都是精品| 五月婷婷激清网| 色99www.| 色墦五月丁香| 激情六月综合| 婷婷五月综合社区在线| 婷婷色五月天在线观看| 久久婷婷五月综合激情国产| 99热免费| 可以看的AV| 免费国产视频| 欧美久久一级内射wwwwww.| 免费观看的婷婷五月视频在线| 亚洲成人网站在线播放| jiujiu热在线视频| 超碰免费观看| 狠狠干婷婷| WWW,婷婷,COM| 六月激情婷婷色| 丁香五月色色婷| 久热99| 深爱五月日韩| 婷婷基地成人五月天| 97亚洲精品| AV人人操| 国产亚洲精品久久一区二区三区| 人人爽人人爽人人爽人人爽| 丁香五月色五月| 丁香久久在线| 日日操夜夜撸| 欧美色五月| 日日干综合| 日本三级中国三级99| a性生活久久无| 丁香五月天色婷婷| 久久婷婷五月天| 天天看片日日夜夜| 91窝窝| 婷色五月| 久久9精品| 亚洲亚洲永久无码777777| 五月天激情小说婷婷| 婷婷终合色图| Av在线不卡一区| 99ri在线视频| 操一区| 婷婷五月影院| 婷婷亚洲欧美丁香五月| 五月丁香色婷| 五月丁综合在线观看| 91人人操人人| 日韩AV在线免费观看| 1024久婷| 欧美日韩国产一二区| 强辱丰满人妻HD中文字幕| 丁香五月色| 性生活视频98791| 深爱激情丁香| 亚洲日日日| 婷婷六月五月天综合| 天天天天天操| 99er在线观看| 成人婷婷五月| 人人操A| 婷婷99| 久久38视频| 人妻久久久久久| 五月天婷婷久久视频| 激情四射网| 天天视频亚洲| 狠狠干综合网| 久久五月天免费网站| 色五月 婷婷, 大香蕉| 大地9中文在线观看免费高清| 亚洲色五月| 五月天丁香网| 九九热视频这里只有精品| 色色激情| 在线不卡视频| 欧美成人AAA片一区国产精品| 99re6在线视频精品免费| 八戒青柠影视剧在线观看| 99精品偷自拍| 五月久久丁香| 亚洲AV无码影院| 99久精品视频| 久久激情视频99| 熟女激情网| 亚洲婷婷六月天| 狠狠五月综合在线| 日日干日日| 色碰碰视频| 婷婷视频网| 91九色最新视频| 日韩精品VIP| 26uuu偷拍亚洲欧洲综合| 在线观看亚洲视频影院| 婷婷国产综合| 99热精国产这里只有精品| 免费观看欧美成人AA片爱我多深| 色婷婷五月天久久| 九九热精品| 日韩免费视频| 中文网婷婷字幕婷| 色五月婷婷婷婷婷婷婷婷婷婷| 久久网站观看免费欧洲国产 | 99热人人艹| 婷婷网影院| 五月丁香激情综合啪| 欧美毛片www| 婷婷色五月色| 色色亚洲五月天| 五月丁香色色网| 亚洲乱码日产精品BD| 国洲夜色亚热在线久久| 丁香六月婷婷激情综合| 人人摸人人干人人做| 久久网日本| 久久精品A片777777| 五月婷婷国产| 五月天免费色| 婷婷六月亚洲综合| 天天干天天插| 69人妻人人澡人人爽久久| 婷婷开心深爱五月天| 丁香婷婷视频一区二区| 婷婷五月激情丁香| 99九九免费精品| 婷婷的激情五月| 色偷偷五月天| 久久性爱99国产| 久久婷婷综| 开心五月激情婷婷| 九九色精品| 97碰碰视频| 九九久久综合网站| 久热99热| 狠狠插.com| 99色色爰| 欧美激情VA永久在线播放| 国产欧美性成人精品午夜| 色爽九九| 99操逼| 99精品成人无码A片观看金桔 | 婷婷色五月色| 全部老头和老太XXXXX| 色婷精品91| 天天爽天天摸天天爱| 国产精品A成V人在线播放| 激情五月丁香社区| 久久精品这里只有精品免费首页| 男女啪啪做爰高潮无遮挡| 操碰99| 五月婷婷啪啪| 国产亚洲精品AAAAAAA片| 久久一品区| 思思热国产| 四川女人毛多水多A片| 69热在线| 狠狠色综合网| 色欲五月婷婷| 亚洲色另类| a毛片二逼wwwwwwwwww| 丁香婷婷五月天色播| 丁香五月欧美| 深爱五月月天| 天天色宗合| 在线另类视频| 九热视频在线精品15| Www.狠狠| 人人摸人人澡人人| av最新在线| 99这里| 色九月综合网| 79精品视频在线观看,| 婷婷酒色网| 五月婷导航| 97超级碰人人| 天天操狠狠操| 色婷婷五月天无码视频| 色导航色婷婷五月天在线观看| 综合在线观看99| 六月丁香激情综合| 天堂美国久久| 天天日,天天射,天天舔| 丁香花五月天婷婷成人社区| 狠狠五月天婷婷激情网。| 日韩黄色影院| 天天色域综合网| 国产女生爱爱AA| 五月天另类视频| 婷婷五月丁香香蕉| 婷婷五月激情欧美| 久久丁香| 无码少妇高潮喷水A片免费| 婷婷五月六月丁香| 大香蕉手机视频| 色婷婷六月天| 欧美Va在线| 曰韩少妇内射免费播放| 毛片新网地| 亚洲影院婷婷色| 五月婷婷日| 色999五月色| 天天做天天爱天天高潮| 日日日影院| 综合网啪| 五月婷婷色播| 99热精品9| 久久网婷婷| 色婷婷综合网站| 色五月av伊人| 色婷婷成人久久| 九九热10| 四虎婷婷五月天| 99综合成人视频在线观看 | www.久久| 天堂婷婷丁香六月网| 一起草aV| 夜夜干夜夜操| 五月天精品综合| 久久九九国产| 五月丁香啪| 一级黄色尤物综合视频手机在线观看| 色婷婷综合网站| 五月日韩中文字幕| 激情第四色| 丁香五月91| 97天堂| 五月开心激情| 丁香六月狠狠| 超碰婷婷色| 91婷婷丁香五月| 婷婷五月天.com| 日韩无码乱轮| 五月丁香啪啪啪| www.五月天婷婷| 另类图片激情五月天| 久久婷婷的综合色丁香五月| 免费视频无码| 丁香五月偷拍| 免费试看小视频 99| 超碰99资源站| 婷婷色五月大香蕉在线| 97人人操人人干| 五月天五月天成人网亭亭成人色网站| 色色五月婷| 91色呦哟| 玖玖综合色| 天天视频亚洲| 久久99热这里| 丁香伊人网| 亚洲色区17| 免费看欧美成人A片无码| 狼人婷婷久久| 狠狠色综合网站久久久久| 久久久er热| 久久婷婷五月天蜜桃| 丁香婷婷五月激情四射网| 五月丁香婷婷啪啪| 九九综合伊人| 九九视频在线| 26uuu欧美激情另类| 97碰碰人人| 欧美性生交XXXXX无码小说| 色婷婷亚洲| 色五月播五月| 亚洲色 视频| hd五月婷婷在线| 热99精品视频在线观看| 91狠狠综合网| 色一情一乱一乱91Av| 99九九99九九九视频精品| 亚洲视频在线观看| 亚洲成人免费在线| 激情五月天色色| 国产综合视频婷婷| 五月婷久草| 欧美 色婷婷| 天天色综网| 最近中文字幕大全免费版在线| 一起草av| www.日日夜夜.com| 五月丁香激情四射| 婷婷成人AV| www,超碰| 日本97在线| 視频福利乱色| 狠狠综合区| 超级97碰碰| 五月天色欧美| 丁香五月婷婷亚洲激情四射| av一区免费看| 久艹久| 婷婷自拍| 另类视在线| 狠狠人妻色综合| 老师高潮流白浆喷水的A片| 嫩草AV久久伊人妇女超级A| 久久久人妻| 五月婷丁香| 久久精品99国产精品日本| 欧美槡BBBB槡BBB少妇| 免费看欧美成人A片无码| 少妇性按摩无码中文A片| 婷色五月| 人人摸人人干| 农村熟妇高潮精品A片| 色天堂婷婷| 99碰碰。| 欧美三级级99久久| 九九大香视频| 久久五月丁香| 久久er九九| 日本成人小说婷婷六月| 色五月婷婷亚洲| 五月天开心成人网| 五月香蕉综合| 五月丁香色婷婷婷基地| 夜夜夜夜做天天天做无码视频| 亚洲另类久久| av狠狠操| 婷婷五月色| 九九热最新地址| 国产又爽又猛又粗的视频A片| 99se丁香| 色女人久久| 五月丁香网av| 婷婷丁香水多多视频| 天天色天天色天天色天天色天天色| 婷婷5月天激情综合| 五月天激情Av| 蜜臀99精品| 日本丁香五月| 激情6月| 一本久道综合99| 五月天婷五月天综合网在线观| 99色最新在线视频网站| 色噜噜五月天| 噼里啪啦在线观看免费完整版视频 | 精品皮股午夜AV| 激情都市丁香婷婷| www.99热在线观看| 三男玩一女三A片| 超碰国产在线播放| 99超级碰碰| 五月丁香天堂网婷婷| 五月天精品综合| aaa久久| 日本三级成人秘书精品片| 超碰9在| 色婷婷五月基地在线| 这里只有精彩视频| 丁香六月婷婷久久综合| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 成人亚洲精品| 射婷婷中文字幕| 97色在线视频| 五月丁香六月婷婷的女人| 色婷婷影院| 五月丁香婷婷老司机| 性爱动图国产麻豆一区二区三区 | 色八月婷婷| 五月天婷婷影院影院观看| 久久久久9| 99五月婷| 伊人大香五月天| 97操碰在线视频| 4399无码视频| 天天开心天天色| 色五月播五月| 久久婷婷五月综合色欧美| 男人的天堂97| 色色激情网| 五月丁香啪啪综合| 三级片AAA久久久AAA久久久AAA | 中国女人内射6XXXXX| 五月天激情四射| www.minyis.com【JT】实力收量可预付QQ2101460746 | 激情综合网丁香| 色婷久久| 97色婷婷| 成人天天爽| 大香蕉九操| 日本三日本三级少妇三级66| 欧美视频在线观看噜噜| 久久99激情| 五月丁香婷婷激情爱爱| 五月天色五月天| 丁香五月天之婷婷影院| 久久99久久99精品免观看粉嫩| 黄色激情五月天| 五月婷婷啪啪啪啪| 另类小说五月天综合| 久热免费| 色五月色五天色情网址| 色婷婷伦理| 丁香五月欧美激情| 婷婷五月网图片区| 五月激情婷婷国产精品久久久久久| 96丁香婷婷九月蜜桃综合久久| 九九九九九无码| 欧美色爱五月天| 狠狠色综合网| 色色五月天网站| 超碰三级片| 丁香五月伊人| 俺去啦综合网| 欧亚成人A片一区二区| 888精品福利地址| 99久久6| 亚洲成人综合在线| 大香蕉久| 国产成人+综合亚洲+天堂| 日韩综合天堂| 丁香婷婷啪啪| 99亚洲精品视频| 天天舔天天插天天爱| 婷婷五月天AV| 色色综合日韩| 六月成人网| 狠狠狠五月婷婷六月丁香| 黄色中文字目| 激情丰满熟妇五月| 色性五月天| 亚洲中文字幕在线观看| 人人人人人人人人人草| 狠狠操狠狠插| 伊人超碰| 99久久五月婷婷| 国产精品视频久久99| 九九99偷拍视频| 大婷婷色呦呦噜噜色呦呦噜噜| 丁香五月停停基地| 丁香五月婷婷啪| 激情综合网丁香| 久久精品A片777777| 亚洲色亚洲精品| 九热视频精品| 国产在线黄色| 强伦轩人妻一区二区电影| 99乱视频| 六月婷婷成人| 99久久综合狠狠综合久久| 激情五月婷婷丁香| 九九aV| 激情五月婷婷| 思思久久99| 婷婷亚洲日本| 五月成人丁香av91| 天天干天天做| 五月激情婷婷图片基地| 秋霞少妇AV网站| 伊人色欲五月天| 情欲禁地| 婷婷五月丁香五月天| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 性色天| 国产乱码久久| 99色人| 丁香五月在线自慰| 亚洲 25P| 激情久久丁香| 欧美激情综合| 2025色婷婷| 亚洲va欧美| 婷婷五月天丁香综合网| 久操综合| 五月婷婷丁香五月婷婷| 丁香五月婷婷高清| 丁香五月天电影| 精品人妻久久久久| 色五月激情视频在线综合| 日日夜夜九九| 天天爽天天日| 五月天婷婷激情在线色图| 久久这里只精品66| 色色综合热| 大香蕉啪啪啪| 丁香五月天社区| 丁香五月丁香伊人| www:99热视频| 国产成人精品一区二三区熟女在线| 激情综合网五月| 嫩草综合网| 欧美婷婷丁香五月| 熟女激情五月天| 99热官网精品在线| 色V狠狠的干| 大香蕉太香蕉视频97| 99视频只有精品| 久久婷婷五月天| 99精品视频免费观看,| 99欧美| 热久91| 久久婷婷激情| 婷婷五点亚洲| 丁香六月激情综合网| 日韩不卡DvD| 日日噜噜久久婷婷五月天| 少妇搡BBBB搡BBB搡毛茸茸| 婷婷精品在线| 婷婷金品综合视频| 六月色色婷婷| 免费日韩99| 1024日韩| 99久久婷婷五月综合| 熟女人妻一区二区三区免费看 | 亚洲人妻一区二区| 99免费在线视频| 激情四射五月天| 天堂网啪啪| 婷婷五月天激情文学| 精品一区二区三区木瓜| renrencaoni| 色色色色色色色色五月先| Caop在线| 色五月人妻| 无码色色| 狠狠色 综合色区| 丁香五月天婷婷久久综合| 99re熱| 色婷婷WWW| 婷婷玖玖丁香| 操碰99在线视频观看| 色播jjjj| 教师性爱毛片| 欧美成人在线观看| 开心激情网在线| 玖玖婷婷五月天| 婷婷性爱影院| 操碰99| 最新色色五月天| 五月激情婷婷国产精品久久久久久| 中文字幕久久婷九女同| 五月丁香婷婷狠狠操| 日韩欧洲亚洲| 婷色五月天| 91丨九色丨43老版熟女| 五月婷六月| 久久这里只有精品99| 婷婷久久综合久| 大香蕉人妻| 色婷婷先锋| 日韩三级高清无码| 精品久久这里热66| www.91在线观看| 超碰人人干| 五月丁香香蕉| 99热成人| 亚洲春色奇米影视| 久久女伦| 99热热热国产超碰| 99九九热在线观看| 丁香六月婷婷综合| 激情久久久久久久久久| 黄色片avv| 久久五月天免费网站| 99热碰碰| 99热精品在线播放| 久久9视频欧美| 亚洲啪啪视频| 五月天狠狠网站| 情情五月天色| 色噜噜婷婷| 色五月婷婷老师| 久久久激情| 大战熟女丰满人妻AV| 影音先锋91网站在线观看| 五月天久久小说| 久9视频免费播放| 五月五婷婷网| 色五月天网| 国产偷人妻精品一区| 婷婷五月天激情网| 国产又粗又大又爽又黄| 欧美日韩中文国产一区发布| 五月天狠狠| 538在线精品| av九九| 爱久久小说下载网| 国产在线aaa片一区二区99| 日本色色色色色色色色一色二色| 一区二区三区四区牛| 婷婷天堂站| 超碰狠狠色| 五月丁香婷婷综合| 免费无码毛片一区二区A片| 青青夜夜狠狠夜夜狠狠| 92久操视频| 超pen个人视频97| 91狠狠综合久久久| 色五月婷婷影院| 天天做天天干天天综合网| www.日本91| 日本色色图| 五月天丁香婷| 日日撸夜夜操| 久在线综合69| 亚洲国产精品五月天| www.五月天性.com| 性热视频99精品| 99re欧美精品| 亚洲国产精品成人免费一区久久久在线观看AAAA| 人人天堂操| 超碰人人超碰| 秋霞网在线免费基地五月婷婷丁香| 色婷婷五月天激情| 青草五月天| 风流少妇A片一区二区蜜桃| 日韩精品超碰在线观看| 亚洲无码九九| 大香蕉五月天| 久久伊人9| 五月婷婷性| 夜夜谢天天干| 色五月婷婷五月天激情综合| 亚洲 在线 性爱| 婷婷五月天成人网| 久久久久久久久久久jjjj| 色婷婷五月影视| 激情五月婷婷| 色婷婷小视频| 五月婷婷亚洲| 丁香五月天五码婷婷| 色五月网址| 任你日热视频| 五月深爱激情网| 99精品成人无码A片观看金桔| 91大神操美女| 这里只有精品无码| 人人妖人人97| 婷婷丁香五另类网站| 亚洲成人超碰| 久99在线| 国产日日夜夜操| 五月丁香六月婷| 大香蕉啪啪| 五月天婷婷AV| 77777亚洲午夜久久| 久久人妻视步| 色欲久久综合| 婷婷综合| 色五月婷婷基地| 婷婷五月天 丁香五月天 裸体| 99精品在线| 久久综合爱| 成人av在线网站| 99超级碰碰| 日韩精品成人在线| 俺去也婷婷| 最近中文字幕2019视频1| 性色欲情 网站| 免费视频99| 丁香五月91| 伊人激情综合| 丁香五月 六月婷婷首页|