久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(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)營項(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才能完成的操作全部收斂成一條簡潔、可復(fù)用、可參數(shù)化的終端命令。這個(gè)思路適合誰如果你是一個(gè)經(jīng)常和數(shù)據(jù)打交道的人比如數(shù)據(jù)分析師、后端開發(fā)、運(yùn)維、自動(dòng)化測試工程師甚至只是每天要批量處理文件、定時(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ì)外暴露的接口刻意簡化了。為什么不用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í)覆蓋場景。關(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í)場景可以換成任何數(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這段代碼看著簡單但有一個(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í)測效果對(duì)比這版工具做完后我拿上個(gè)月的真實(shí)數(shù)據(jù)測試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í)場景數(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)。這在一開始寫起來略麻煩但長期收益很大因?yàn)檎{(diào)試和橫向擴(kuò)展都變得簡單了。4.3 定時(shí)任務(wù)與CI/CD集成有了可以被管道串聯(lián)的CLI工具下一步自然是定時(shí)化。我用crontab做簡單的每日巡檢用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ì)都是為了無人值守場景。# 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工具雖然看起來簡單但實(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ā)測試沒問題交付給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 坑三測試缺失導(dǎo)致上線翻車CLI工具看起來代碼量不大很多人就不寫測試。我的切身體會(huì)工具越簡單越應(yīng)該在測試上花心思因?yàn)槟愕暮诵倪壿嬘脩裘刻於家蕾囁淮屋敵鲥e(cuò)誤可能造成比預(yù)期大得多的連鎖問題。CLI-Anything從一開始就要求每個(gè)命令至少包含兩組測試正常流程測試和異常流程測試。異常流程測試?yán)镏辽俑采w文件不存在字段缺失類型轉(zhuǎn)換失敗三種情況。測試代碼量可能跟業(yè)務(wù)代碼相當(dāng)?shù)看胃膭?dòng)后跑一遍測試帶來的安心感值回票價(jià)。# 測試示例簡化版 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í)依賴必須跑完整測試套件。5.5 坑五文檔沒跟上工具等于白做CLI工具最容易被忽略但最影響使用的環(huán)節(jié)是文檔。我見過非常多工具功能完整、代碼優(yōu)雅但打開--help只看到幾行干巴巴的字符串用戶根本不知道輸入什么。我給CLI-Anything寫了一個(gè)自動(dòng)文檔生成器每一個(gè)命令的裝飾器參數(shù)、參數(shù)規(guī)則、默認(rèn)值會(huì)自動(dòng)生成一份Markdown格式的簡短說明放到docs/commands.md下。同時(shí)每個(gè)命令都強(qiáng)制提供至少一個(gè)示例哪怕只有一行。在使用頻率最高的前三個(gè)命令里我還加上了典型場景幾個(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í)如果長時(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è)簡單的規(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)化流水線里的腳本靜默失敗了?,F(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í)需求長出來——今天加一個(gè)fetch-orders明天加一個(gè)bulk-tag半年之后回頭看你會(huì)驚訝于自己已經(jīng)擁有一套順手的工作流了。這就是CLI-Anything帶給我的最大改變那些瑣碎的、重復(fù)的、讓人疲憊的操作終于都變成了我手中的一條條命令。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
天天综合欧美黑人| 99re99| 日本黄色大片一级视频免费麻豆| 日韩电影免费网站麻豆视频| 九九精品热| 自拍偷拍第26| 欧洲一区二区三区四区在线观看| 天堂av2019| 眼镜人妻101.com| 无码78| 久久久久网站-538在线视频-欧美永久乱码| 中文字幕中文字幕一区二区| 欧色网址| 丝袜综合网| 丝袜天堂| 久久国色天香香蕉| 久久五月天婷婷丁香中文字幕| 婷婷探花久久精品一区| 中文97国产| 色五月综合网| www.夜夜| www久| 13小男生GAY自慰脱裤子| 激情小说激情视频| 黑人粗大V S日韩女优视频| 91欧美高清| 日韩精品中文字幕一| 小说区 图片区色 综合区| 欧美最大综合网| 天美麻豆精品视频99| 屁屁影院一区二区三区国产| 涩涩涩综合| 97九色| 欧美日韩制服| 青青久操| 国产视频三区四区| 97天天搞在线| 亚洲 日本 一 二 三| 国产女人91精品嗷嗷嗷嗷| 大屁股人妻女教师撅着屁股| 亚洲精品自拍| 国产黄色在线播放观看| 91欧洲国产成人久久精品网站| 99re欧美| 好湿好紧视频| 精品国产一区探花在线观看| 丁香七月婷婷| 九九九九9999| 久久国产免费激情视频| 国产专区第一页| 欧美亚洲素人制服精品| 被男人添B超爽视频| 精品亚洲成人免费在线| 日韩无码视频黄色| 日本久久久久久久久久| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 欧亚免费视频| 啪啪一区| 亚洲欧美九九九| 亚洲一二三精品久久网| 97国产亚洲中文在线| 精品夜夜澡人妻无码| 大奶啊啊好爽| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 亚洲成人久久一区二区| www.91理论| 一级特级aaaa毛片免费观看 | 视频国产成人精品日本亚洲18| 清纯唯美综合亚洲| 新亚洲无码| 91精品国产91久久福利| 黄在线| 黄色高清无码无码破解免费暗网| 国产999精品久久久久久| 亚洲丝袜二区| 久久亚码| 天天噜| 国产一区二区三区免费视频在性观看| 欧美αv.com| 91艹B视频| 日本超碰在线国产一区| 嗯嗯,好大,好爽,好骚| 偷拍片久久| 国产熟女无套内射| 亚洲 欧美 制服 另类 自拍| 亚洲精品啪视频| 人人操av| 日本黄页视频在线观看| 五月婷网站| 色婷婷丁香五月| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 欧美日韩国产中文精品字幕自在自线,| 伊人天堂在线| 亚洲自拍欧美色综合| 加勒比综合九九99视频在线播放| 黑人干亚洲| 大香蕉78| 国产91乱伦| 精品久久一区二区三区四区五区| 亚洲黄色网址| 国产精品不卡一区二区电影| www.zbzhongsen.com| 男人的天堂2018东京热啪啪啪| 青娱乐蜜桃臀AV色婷| 国产又粗又长的视频| 五月丁香六月综合缴清无码| 欧美拳交在线播放| 后入式五六区| AV网站高清无码在线观看| 五月综合视频| 国产久9| 久久精品国产亚洲AV高清演员表| 婷婷导航| 强乱老妇中文字幕| 日韩乱伦影音先锋| 日本一天色道久久久精品视频| 综合亚洲欧美| 欧美拳交在线播放| 久久色精品视频在线| 日韩国产乱子伦App| 欧美亚洲第1页| julia国产在线 | 午夜男女爽爽大片免费观看| 五月天综合在线| 九九九九九九九九九五码| 97在线视频观看| 很黄很色的视频在线观看| 日韩人妻操B| 33044男人的天堂深夜备| 熟女激情综合网| 黄污污污污| 欧美熟妇色| 九九探花视频在线观看| 91一区二匹| 亚洲国产麻豆一区二区三区| 超碰吊日色| 337p大胆噜噜噜噜噜91Av| 欧美与日韩97| 日韩av一级黄片| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 全球成人中文在线| 欧美综合传媒| 日韩无码专区| 日本黄色天堂| 岛国片在线观看视频亚洲| 夜色97| 黄色小视频日本txt| 99热 按摩 日韩| 日韩人妻制服丝袜av| 96国产污污污丝袜| 国产精品无码论坛| 国产99999| 九九九综合精品| 377p欧洲日本亚洲大胆| 好爽要喷了| 久久久成人国产精品无码| 久久精品一区一起草| 欧美一区二区亚洲天堂| 国产精品视屏| 东京太热久久久| 国产9熟妇视频网站| 亚洲中文字母在线播放| 中欧人妻丝袜中文字幕| 91色鬼| 三男一女不戴套的A片| 女同性恋一区二区三区精品视频| 亚洲一区在线观看欧洲 | 97超碰影音| 91丨九色丨东北熟女| 91爱啪| 中文字幕大片三级狠狠干| 嗯嗯啊啊好爽| 日本999精品| 美女自卫慰黄网站免费| 日韩三级伊人| 中文字幕av片| 中文字幕丝袜人妻| 99在线精品观看99| 欧美黑人精品一区二区| 国产熟女完整版中字| 96超碰网| 伊人aaa| 久久精品国产精品亚洲艾通辽熟妇| 老司机香蕉| 少妇天堂网络| 五月香婷婷| 亚欧日韩成人| 99婷婷一区二区| 亚洲 欧美 小说| 欧洲熟妇xxXx欧美老妇裸体 | www.夜夜| 人妻99p| 老子午夜伦不卡影院| 夜夜综合| 白丝AV网站| 啪一啪免费视频| 1769成人国产精品视频| 超碰97久| 福利大香蕉| 亚洲三级网址久久最新| 91扒丝袜综合在线| 五月天丁香欧洲日韩| 免费啪啪啪网站18岁| 黄色大片免费在线| 麻豆国产97在线| 一区二区亚州激情久婷婷欧美| 色999人与兽| ,成人免费啪啪视频| 99无码狠狠久久| 蜜臀久久99精品久久久久久成人小说 | 偷拍2020| 国产乱码久久久久久| 国产日韩精品一区二区三区| 久久久工口| 亚洲激情AV| 日本熟妇人妻中出视频| 人妻一区视频| 亚洲另类在线观看| 亚洲国产一级精品毛一级精品看免费视频 | 中文有码第五页| 国产女上位好爽在线| 首页亚洲国产高跟丝袜诱惑视频| 超碰成人公开| 免费A V在线播放| 97人妻免费中文字幕| 欧美爱三级日韩久久| 青娱乐休闲视频在线观看| 97超碰色情| 欧美综合自拍| 亚洲一区在线观看欧洲| 一级人妻性爱视频| 亚洲h片在线免费观看| 91精品久久久| 超碰99在线| 在线黄页看毛片| 五月天激情国产综合婷婷婷| 96AV精品| 久久久一级| 亚洲影视综合网| 色色色欧美| 久草精品热视| 综合亚洲情色| 亚洲极品| 中文久久久| 国产在线观看91精品一区| 逼操网站| 99热婷婷| 日日噜噜夜夜久久亚洲一区二区| 激情人妻另类| 一区二区视频在看| a片久久久久久久久久久久 | 人妻天堂综合网| 色蜜AV| 日日干日日| 亚洲欧洲小说图片视频| 亚洲少妇在线影音| 久久九九精品一区二区| 人妻夜夜爽天天爽三区麻豆AV网站| 亚洲精品国产精品成人| 精品一区二区综合熟妇| 久久久久久久久久久久久9999| 欧美色图中文字幕| 校园春色美腿丝袜 | 日韩电影免费网站麻豆视频| 无码高清操逼网址| 婷婷久久大香蕉| 麻豆天美国美国产| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 久操av在线| 色姑娘综合网| 五月天婷婷影院| 亚洲中文字幕日产无码久久| 麻豆av一区二区| 色y情视频免费看| 色情成人五月天| 色诱avtt| 中文字幕在线观看网址| 操逼网免费无码视频| 大香蕉综合| 亚州五月| 99国产精品视频尤物| 国产97色在线| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | av最新免费中文字幕| 狠狠色婷婷777| 麻豆福利视频导航| 青青草好吊色| 成人AV在线电影| 97爱b| 一区二区免费电影久久| 久久久久久中文字幕中文字幕最新| 九九九只有精品| 在线亚洲 欧美 日本专区| 99热久| 欧美一区二区三区黄色影视| 精品人妻av区天天看片| 欧美性爱在线无码| 熟女91网| 国产视频不卡在线观看| 99后入| 午夜福利激情在线视频| 亚洲一二三四区机械| 96精品久久久久久久久| 國產尤物AV尤物在線觀看| 人妻夜夜爽天天爽麻豆三区网站 | 搡老熟女老女人老熟妇免费视频| 夜夜嗨AV蜜臀av| 九九九九九九九九九国产精品| 国产树林里野战在线看| 丝袜视频网国产90| 中日韩久久人妻一区二区| 亚洲情色综合网| 中文字幕五月婷婷免费| 午夜福利在线视频1000| 欧美日韩国产黄色片| 女生自91网站| 国产亚州精品美女久久久免费| 国产精品在线一区二区| 一级成人性爱| 超碰1997| 在线人人人人人人精品超 | 骚日日av| 激情丁香婷婷| 中国农村熟妇毛片视频| 综合网97| 天天爽天天爽| 伊人一区二区在线播放| 久久久久九九九九九| 99久视频| 亚洲av性爱电影| 嗯阿好爽好紧| 欧洲熟妇xxXx欧美老妇裸体| 国产精品播放| 大香蕉啪啪啪啪在线| 欧亚性爱视频免费看| 欧美色91| 闷骚老熟女15P| 97超碰中文在线| 亚洲色图 欧美热图 清纯唯美 另类自拍| 9国产超碰| wuyechaopeng| 又大又白奶子| 精品久久久高清无码| KK色在线影院| 99久久这里只有精品| 中文字幕五月婷婷免费| 欧美图片校园春色| 午夜成人福利影视| 激情五月天社区| 人妻欧美| 韩国国产欧美情侣视频在线| www.91久久| 狠狠色噜噜狠狠狠狠2018| 欧美激色| 日本精品国产视频| 91久久婷婷| 9久在线视频只有精品| 亚洲男人天堂2| 亚洲欧美一区二区三区在钱蜜桃 | 尤物av网站| 国产av美女被艹的乱叫| 欧美精品二区视频在线| 日本色日夜干| 久久男人| 伦理日韩国产久久| 四虎免费看黄| 五月婷在线| 在线观看色视频| 日日夜夜免费| 78精品| 精品九九九九九九九| 狠狠操狠狠插| 日本熟女中文| 亚洲欧美日韩中文播放| 麻豆天天躁天天揉揉AV| 欧美玖玖爱免费玖玖| 九九视品黄色| 日本久久精品| 亚洲欧美中文一区二区三| 色噜噜狠狠色综无码久久合欧美| 亚洲,欧美,综合网| 91 亚洲情侣偷拍 久久| AV在线资源| 欧美成人9797| 天天日老熟妇| 中文字幕丝袜人妻| 九九九九九九亚洲| 婷婷色导航| 欧美十八禁网站| 操逼国产免费| 嫩草一区二区在线观看| 这里只有精品视频在线观看麻豆| 亚洲av国产av综合av卡| 欧美偷拍区| 欲色综合| 九九九九九精品视频| 日韩 欧美 国产 麻豆| 97在线青| 香蕉av一区二区三区| 四虎免费看黄| 啊啊啊不要好爽日韩无码一区| 人妻出轨一区二区三区| 97 国产一区| 日韩在线女优天天干| 国产成人资源| 亚洲AV资源| 日本不卡高清免v欧美日韩在线观看| 天天干,夜夜爽| 男人的天堂啪啪啪啪啪蜜桃不卡| 天综合网| 欧美高清性猛交| 亚洲 欧美 91| 欧美性战999| 婷婷情色五月天| 美女黑人91神马| 日韩资源网| 夜夜春夜夜操| 东京热av影院| 九九碰九九爱97超| 日韩激情毛片一级久久久| 国产又猛又粗又爽又黄| 人人摸人人叼| 狠狠久久亚洲欧美专区| 二对二中文字幕。| 在线观看午夜婷婷久久久久清性观看| 久久这里只精品| 夜夜骑夜夜操| 国产福利在线视频网站| 国产强奸超碰AV| 午夜黄色免费在线观看| 大香蕉97久久| 韩日精品福利视频一区不卡在线免| 日本道日本道中文字幕日本道最新日本道在线观看 | 日B操| 激情网色| 亚码激情| 欧洲亚洲人人爽爽视频| 大香蕉中文201| 国产区日韩区在线观看| 国产亚洲色婷婷久久99精品91葵花宝典| 亚洲欧美成人在线| 91偷拍欧美亚洲| 97精品视频在线播放| 亚洲综合91| 日B操| 亚洲无码成人精品| www.久久| 91美女視頻| 欧美性爱一区二区三区| 九九热久久99精品re| 日本岛国黄色网址| 亚洲无限观看| 国产熟女精品一区二区| 性色av网站| 青青草视频久久久久| 青青草色AV| 一级@啪啪视频| 色哟哟的毛片| 日韩青久久| 亚洲阿v天堂无码z2018| 99热这里只有精| 亚洲偷91色| 欧洲亚洲国产综合在线| 嗯啊不要在线| 啊啊啊啊啊啊在线| 超碰人人超在线观看| 国产不卡中文字幕免费avi| 91宗合网| 国产亚州日韩欧美看片| 囯产精品强| 国产精品原创巨作?v网站| 丁香六月激情综合| 精品人妻一区二区三区蜜桃视频| 插穴性爱视频在线观看| 在线观看视频91| J?P?NESEHD熟女熟妇伦| 午夜精品久久久久久久男人的天堂 | 中文字幕av片| 盗摄女人妻在线| 欧洲综合视频| 欧美人黑A片无码免视费| 日韩一级二级| 97久久久| 色综合潮| 美国黄片aaa| 少妇天堂网络| 国产精品盗摄 偷窥盗摄| 按摩中文字幕| 欧美Ⅴ性爱| 老师充足的奶水小说| 国产色产精品在线观看| 午夜性| av爱爱爱| 大香蕉之青青草原| 日本中文字幕在线视频| 日本Suv精品一区二区| 精品人妻伦一二三区久久| 美女黑人91神马| 极品尤物女神在线观看| 国产自偷| 久久国产三区| 91精品国产91熟女| 97天天爽| 999精品国产高清一区二区| 极品内射| 国产一区二区三区导航| 91中文字幕在线观看| 亚洲无码99| 色婷婷日韩精品一区二区三区 | 亚洲情色无码一区二区三区| 国内毛片无码一级毛片| 激情小说亚洲| 国产性爱欧美性爱在线| 五月天丁香网| 人妻另类 专区 欧美 制服| 久久夜嗨| 久久午夜伦| 精品少妇人妻av久久免费| 99re这里只有精品2| 综合亚洲情色| 97人人干| 性爱精品一区| 97啪啪| 亚洲精品1区| 精品亚洲黄色片 国产精品导航一区二区 | AV天天综合| 精品蜜乳AV免费观看| 亚洲欧洲第二视频在线观看色图| 国产精品一区二区黄片| 老外又粗又长一晚做五次| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 超碰99在线| 久久婷婷在线观看视频| 91精品大奶人妻| 午夜成人爽爽爽爽A片李冰冰| 日韩大香蕉精品在线视频| 亚洲天堂区| 日本精品网站在线中文| 亚洲丝袜诱惑| 色天堂综合| 久久国产精品一级二级三级| 激情综合网五月婷婷五月天| 操啊国产| 激情欧美97| 久艹伊人精品综合在线| 吻戏激情性巴克| 老熟妇一区二区三区…| 91在线视频国产网站| 后入精品| 999色欧美中文字幕| 日本精品久久久久久久| 国产青青美女玩逼视频| AV在线资源| 欧美激情片一区二区| 婷婷亚洲中文字幕在线| 98色网| 九九综合| 人人乐大香蕉| 天堂日本亚洲欧美| 99爱久久视频频| 强上我不卡卡| A啊啊在线观看| 99热精品国产| 日韩精品操少妇| 色男人色天堂东京热| 影音先锋一区二区在线资源| 亚洲区限制级| 日日干夜夜骑| 日本高清视频在线观看黄已三辽| 久久日韩肥臀| 国产精品久久久久久久久久久久久久吹| 日韩大香蕉AV影片| av影片在线观看不卡| 日本操逼无码| 国产成人精品必看| 亚洲中文日韩欧美大香蕉视频| 国产精品无码久久久久2025| 久久av成人无码免费| 屁屁影院一区二区三区国产| 色色综合网站| 9久久9综合| 97在线青| 一区二区视频在看| 人人操人人爽人人操人人| 韩三级a视频在线观看| 亚洲一区二区三区中文字幕| 长长久久免费视频| 97干天天| 国产精品对白自产拍| 综合97| 2017人人操,人人摸| 久久三| 大香蕉宗合网在线| 久久爱超碰网| 肥佬影院91| 一个色导综合| 欧美性爱五月天| 九一屌逼| 综合网亚洲1| 久久九色| 国产成人久久久精品免费AV| 厕所偷拍在线| 超碰在线日韩一区| 翔田千里Av在线| 91久久久久久| 人妻人人澡人人爽人人| 日本欧美不卡| 操逼操逼逼操操逼91 | 久久久久久大| 91精品操美女| 91视频伊人| 大香蕉久操| 蜜臀久久久| 清纯唯美综合| 亚洲av影院在线观看| 不卡超碰护士AV在线免费播放| 久久美国毛片| 久久精品国产精品一区| 大香蕉久操| 亚洲老司机123专区| 白丝av| aaa一级黄片| 性爱欧美五月| 国产精品久久久久无码Av网曝门| 日本一级一级一级一级| 91视频综合在线| 欧美一区二区三区互相| 蜜臀久久一区二区| 国产又粗又长的视频| 亚洲综合另类小说色区亚洲成av人片在www| 性爱av网站| 97天天在线| 一本精品日本在线视频精品| 亚洲中文字幕有码视频一区二区三区| 中文字幕成人乱码熟女精品国50| 熟女人妇一区二区三区| 精品成人女人久久| 370p日韩欧美亚洲精品| 亚洲国产综合久久天堂| 青春草莓视频在线观看网址| 久久久爆乳翘臀一线天伦理视频| 日韩精品三级| 精品国产精品一区二区| 中出20p| 天天精品| 大香蕉日韩欧美| 黄色大香焦1级‘′‘| 欧美成人一区二区| 26uuu性| 国产久久久久影院老熟女| 黄色激情电影在线观看| 色综合20p| 久久精品中文字幕无码l| 99色日| 最新的亚洲无吗| 中文字幕女同在线| 嫩草影院在线观看精品| 无码九九九九| av一区二区三区 中文| 国内精品99999| 水野优香在线观看| 久久久999| 少妇与黑人高潮在线| 亚洲AV成人无码一二三久久| 亚洲视频小说| 成人网站 免费观看| 色原狠狠天天天| 婷婷尹人大香蕉免费| 91肉丝| 欧美情色男人的天堂| 中文字幕一区二区在线日韩精品| 亚洲诱惑天堂 | 91欧美丨精品丨入口| 亚洲高清无码在线桃色| 欧美天天影院| 97色冈| 精品国产无码中文| 欧美日韩国产色五月综合在线| 99爱爱| 亚洲欧美高清无码| 99re在线精品78| 亚洲丁香花色| 日韩精品资源专区二区| 东京热熟女亚洲视频网站| 中文字幕jul-617人妻熟女| 中文字幕乱亚洲美女精品一区| 熟妇最新先锋一二三区| 干干干天天| 久久精品久久久久久久| 欧美综合制服在线| 青草av在线| 一道α片欧美| 精品久操| 中文字幕97色| 97在线视频观看| 欧美十八禁视频| 日本熟妇自慰性高潮一区二区三区| 好吊妞转入那个网| 人人人人插| 亚洲欧美日韩中文播放| 96精品一区| 色诱中文字幕| 九九av| 岛国免费黄色网址| 欧美91在线| 亚洲国产福利视频| 精久久久91| 色玖玖| 在线无码操| 无码人妻一区二区三区色欲aⅴ| 日韩国产九九精品一区二区三区毛片| 亚洲精品久久久久久久久豆丁网| 操逼视频免费日韩无码| 亚洲精品免费中文字幕| 欧美日韩欧美| 天天操熟妇| av麻豆啪啪| 日本美女性生活久久久久久久| 精品区国产区一区二区三区| 超碰人人操97碰| 久久只有精品| 久久久久久久| 亚洲一区二区中文字幕| 天天插天天操天天摸天天射天天看| 婷婷成人久久久精品| 国产成人精品亚洲日本| 先锋色眉乱伦资源| 欧美18老人禁| 精品一区二区三区国产| 高清孕妇孕交 交| 日韩干B| 天天草AV| 欧美综合 站| 日韩电影天堂视频一区二区| 粉嫩国产精品久久久| 99超碰色| 国产精品永久免费10000| 色娱乐色呦呦夜夜夜夜av| 亚洲成人一二三区| 天天透伊人| 性爱动态120秒| 婷婷综合网| 99激情| 99精品在线播放| 日本久久精品| 五月婷在线| 久久伊人大香蕉| 九九热超碰| 亚洲无码色| 熟女丝袜视频| 欧美性色综合网| 97 超碰 人人做 人人爱| 嗯~啊~快点 死我视频| 欧美日日夜夜| 欧美暴力猛交| 久久精品成人一区二区三区蜜臀| 久久色AV线| 国产精品一二三| 久久这里只| 亚洲?V高清一区二区三区尤物| 啊啊啊在线观看| 国产v片在线免费观看| 婷婷在线视频在线观看| 操逼片国产| 欧美黄片视频在线观看免费 | 操亚州| 九色 蝌蚪 熟女自 | 亚洲成人久久美女| 人妻激情偷乱视频一区二区三区 | 色九月综合| 亚州日韩97| 97亚洲自在精品在线观看| 97在线视频网站| 国产精品不卡一区二区电影| 欧美亚洲另类在线蜜桃| AV九九| 天天综合影院91| 欧美在线综合| 91丝袜在线观看| 天天草夜夜草高潮片| 天天看,天天做| 亚洲情色五月天| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 91社区伊人| 乳欲人妻办公室奶水| 色婷五月| 老鸭窝黄色视频网站| 亚洲图片小说欧洲| 1人人看人人摸人人操| 操比国产| 国产丰满熟夫69mpp| 日本幼女18+| 成人无遮挡毛片免费看| 伊人久久艹| 久久久久9| 久久人妻| 99日精品欧美国产| 嗯嗯,好大,好爽,好骚| www欧美91| 婷婷午夜成人色中色| 久久人人妻| 久久宗合97| 久久这里是精品| 77777亚洲蜜臀精品久久综合蜜臀| 色妇91| 免费a级毛片av无码久久精品中文字幕| 99re国产中文字幕| 欧美精品久久| 亚洲国产精品V?在线播放| 国产精品久久久三级无码| 蜜乳AV色欲AVAV无码| 国产欧美日韩一区二区三区| 九热视频| 天美一区在线| 国产在线观看一区二区三区| 久久这里只精品99re66图| 啊啊啊啊啊啊好湿好爽视频| 日韩啪啪视频| 亚洲经典啪啪| 国产精品在线一区二区| 性饥渴少妇av无码毛片| 国产欧美美女免费观看视频| 欧美天天影院| 午夜电影在线观看无码专区| 玖玖蜜臀资源网| 伊人操| 国产亚洲国产超碰| 欧美天天综合站| 国产精品毛片?v一区二区三区 | 麻豆国产96在线| 亚洲有码第一页| 亚洲免费在线探花| 成人A片男人的天堂| 可免费观看的av毛片中日美韩| 精品久久久久久亚洲| 亚洲情色 自拍| 国产激情视频在线观看| 死我十八禁| 99热只有这里有精品| 亚洲精品黑丝| 人人摸人人叼| 亚洲成人AB| 婷婷久久五月| 亚洲高清色综合| 日产狠狠干| 中文字幕AV中出| 国产乱码久久| 亚洲阿v天堂在线| julia在线观看久久| 日韩一级性爱无码| 久久成年精品| 超碰成人公开| 中文字幕第95页| 久久精品性| 91熟女网| 99999精品成人| 1级午夜影院费免区| 精品久久九| 看日韩操逼| 欧美综合色| 伊人97超碰| 久热精品在线国产| 婷婷九月国产| 婷婷色色网| 久久国产成人精品国产成人亚洲 | 大香蕉欧美| 精品视频专区| 色成人Www精品永久观看| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 男人女人18禁片免费看网站| 操b网站亚洲无码| 黄色欧美性爱视频| 人人妻人人澡人人爽久久av| 国产夜夜操| 免费在线黄片视频| 日韩有码中文字幕女同性恋| 在线啊啊啊啊| 黄色av片三级三级三级免费看| 老熟女综合网| 色999偷自拍拍| 日本高清有码网址视频| 91久久久久久久久18| 一区| 五月婷婷六月激情| 成人一道本免费视频| 亚洲欧美校园| 熟女自慰久久久| 日本女人操逼| 日韩欧美操逼xxx| 成人九九| 日韩电影天堂视频二区三区| 深爱激情五月天| 在线免费观看日韩一区| 97这里有精品| 中文字幕神马久久| 夜夜中出国产| 免费精品福利在线观看| 国产乱伦亚洲色图高清无码| 综合欧美色图| 2017大香蕉国产精品久久| 日本在线一二 | 91欧美巨乳| 不卡九肏| 夜夜操2028| www.色操逼| 在线观看无码三级少妇| 91东北熟女| 人妻精品一区一区三区蜜桃91| 蜜桃视频一区二区三区在线观看| 久久香蕉影院| 插欧洲美女欧美精品| 无码区蜜乳| 97爱| 人人妻人人爽人人精品| 骚人妻少妇视频| www.高清无码诱惑一区.com | 少妇一区二区三区在线观看| 五月婷丁香| 综合久久欧美| 国产熟女完整版中字| 一起草三级AV电影在线观看 | 色婷婷激一区二区三区| 男插女青青影院| 91综合中文字幕| 中文有码9| 夜夜嗨一区| 十八禁电影伊人网| 国产 大胆 对白| 日日AV加勒比| 色女99一级片在线观看| 天天淫人人妻日日色| 欧美天天拍| 日本人体九九九九九九| 丁香久久| 少妇一线天久久久久久| 67194国产| www五月| 日本狠狠干| 天天综合色| 色色亚洲| 中文字幕艹艹| 夜夜操夜夜爽夜夜高潮| 翘臀vidoes| 亚洲美女精品| 国产无遮挡| 玖玖蜜臀资源网| 美国久久一二三四| 爱爱久久| 老熟妇一区二区三区| rivers-china.com| 久久成人东京热人妻| 麻豆熟妇乱妇熟色A片在线看 | 久久婷婷一区二| 美国美女AV在线| 国产精品乱码久久久久久久久久久久| 日韩熟女精品无码专区一区二区 | 激情网色| 国内精品久久久久影院亚洲| 开心五月婷婷激情| 18一区二区三区| 黄色十八禁网站| 久久视频少妇美女| 无码二级三级| 啊啊啊好想要| 另类小说综合网| 欧美日韩岛国大片在线观看| 丁香色婷婷| 麻豆国产原创AV色哟哟| 成人在线午夜视频一区| 白嫩91在线亚洲| 久久69| 欧美一区二区福利在线| 91精品伊人久久久大香线蕉91| 99色在线| 青青草乱入乱欲视频在线观看| 蜜桃臀AV在线| 人人操人人93| 无码黑人精品一区二区三区三| 精品国产精品一区二区| 亚洲男人的天堂一区二区| 欧美在线视频播放| 亚洲综合嫩| 午夜一级免费毛片| 超碰人妻在线| 裸模AV女优| 91操熟女视频| 眼镜人妻101.com| 久久人人看| 青青国产在线拍揄自揄拍| 一卡二卡在线播放| 亚洲国产欧美一区二区潘金莲 | 亚洲熟女av中文字幕| 18啪啪手机免费性爱| 丁香啪啪| 极品AV网站在线观看| 91亚州| 人妻乱仑一区二区三区| 涩爱AV在线| 国产一区二区在线看| 99re热有精品视频国产| 长长久久曰曰夜夜成人网| 国产妇女精品视频青青草| 97综合在线| 中文字幕免费看大片| 欧美成人亚洲精品| 99re视频在线播放青草| 国产熟女免费观看久久| 麻豆婷婷成人一二三| 色吊丝 日日骚 清纯唯美| 中文字幕精品一区二区精| 亚洲国产一区二区三区在线 | 骚货人妻偷情自拍在线视频| 五月天欧美色图| 国模私拍一区二区三区神乳| 国产女人高潮视频| 日本免费二区三区| 404操逼福利视频| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 色欧美在线| 亚洲人妻中文高清| 久久久熟妇熟女国产| 欧美日本成人一区二区| 天天综合精品| 成人AV在线网站| 日操粉逼逼| 欧美传媒一区| 岛国黄| 欧美韩国你懂得在线 | 蜜乳视频网站| 乱理日韩中文| 国产 日韩,欧美 自拍| 天天综合91在线| 好吊色青靑草| 日本三级中国三级99人妇网站| 激情文学亚洲| 六月婷婷综合| 超碰吊日色| 五月丁香啪啪网| 成人精品视频一区二区| 亚洲午夜福利视频| 国产激情av女片自拍| 99色在线| 麻豆天美一区二区| 在线 制服丝袜中出 人妻| 72av视频| 亚洲综合另类| 国产97在线 | 亚洲| 嗯嗯啊啊视频在线看| 日日爱99| 欧美一区二区三区大综合| 蜜乳AV免费观看| 久久亚洲天天做| 欧美伊人久久综合网| 中国小夫妻勾搭露脸淫荡对白| 高潮的A片激情扒开一区| 国产精品久久久久久久免牛肉蒲团| 午夜视频好爽啊| 色香伊人| 久久久久9999| 精品熟女呻吟久久91| 色婷婷aV一区二区三区麻豆综合| 人妻二区| 熟妇国产免费一区| av一区二区三区 中文| 欧美激情1区| 无码heyzo高清一区| 欧美日韩啪啪电影| 人妻少妇久久| 色噜噜狠狠色综无码久久合欧美| 国产99热| 超碰夫妻97| 女人被添高潮免费视频| 久久东京热久久| 少妇500双飞99| 家庭乱伦网站国产| 9Ⅰ超碰| 日韩av熟女一区二区三区成人| 强奸国产精品视频| 久久久999国产| 一道本东京热加勒比一区二区三区| 高潮毛片无遮挡高清免费| 极品美女嘿咻| 77777亚洲蜜臀精品久久综合蜜臀| 高潮毛片无遮挡高清免费| www久久精品| 宅男91视频在线播放| 1024人妻熟女一区二区三区| 色欧美亚洲| 制服诱惑亚洲一区二区三区在线观看| 国产一区二区三区精品观看啪| 欧美色亚洲| 狠狠躁天天躁日日躁97| 欧美极品女人的天堂| 老熟女乱子伦中文字幕一区二区| 夜夜高潮夜夜爽夜夜爱爱一区 | 97人人夜| 色爱欲亚洲| 久99久视频| 日韩美女啪啪一区| 色香av| 人妻激情在线视频| 亚洲天堂另类美腿| 手机看片1024你懂的国产| 免费精品无码一级毛片牛牛影视| 亚洲综合夜色| 欧美亚洲第1页| 六月丁丁香| 成人午夜小视频手机在线看| 最新日本中文字幕| 熟女91网站| 99久在线精品99re8热视频在线| AV天堂丝袜| 色婷婷激情| 日本高清_区二区三区| 色综合国产在线观看| 玖玖久久久| 熟女高潮精品一区二区| 亚洲综合性网址| 亚洲天堂另类小说男人| 九九热免费视频| 亚洲操逼视频网站| 日韩亚洲中文有码视频| 亚洲无码国产探花在线观看| 五月情色天| 欧美综合综合| 超碰在线在公开超碰在线在公开| 欧美A√综合网| 一区二区首页| 麻豆蜜桃视频在线观看| 99激情视频| 亚洲人妻av| 静品嫩模一区二区| 91欧美少妇| www国产天美久久久| 久草精品国产99| 亚洲婷婷丁香在线| 91成人无码| 大香蕉日韩| 麻豆一区二区AV天美| 极品出轨视频网站| 青青草原成人| 2020天天色综合| 高清孕妇孕交 交孕妇| 久久久少妇诱惑精品视频| 国产久久男人天堂| 后入福利视频| 欧美在线|亚洲| 久久网亚洲| 蜜臀久久99精品久久久久电影| 中文字幕熟女人妻丝袜丝| 亚洲欧美内射| 色欧美在线| 九久9精品| 91久久久亚洲| 色色毛片| 欧美亚洲在线| 一二三区视频在线观看| 国产日韩中文字幕欧美| 激情另类激情| 特污精品女优骚货黄色视频在线免费观看|