亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

Python自動(dòng)化腳本實(shí)戰(zhàn):從環(huán)境配置到定時(shí)任務(wù)全流程

Python自動(dòng)化腳本實(shí)戰(zhàn):從環(huán)境配置到定時(shí)任務(wù)全流程 我最早認(rèn)真寫(xiě)Python自動(dòng)化腳本不是為了搞什么“大工程”純粹是受不了每天下班前那半個(gè)小時(shí)的重復(fù)勞動(dòng)下載文件夾里躺著各種PDF、圖片、壓縮包要給它們重新命名、按類型和日期歸類還要把最新的報(bào)表發(fā)給相關(guān)的人。起初我用鼠標(biāo)一個(gè)個(gè)點(diǎn)后來(lái)實(shí)在覺(jué)得荒唐就花了一個(gè)晚上寫(xiě)了第一個(gè)整理腳本。嚴(yán)格來(lái)說(shuō)那個(gè)腳本寫(xiě)得挺糙但它幫我省下了此后無(wú)數(shù)個(gè)“半小時(shí)”。也是從那以后我意識(shí)到日常工作的“自動(dòng)化”這個(gè)詞聽(tīng)起來(lái)高級(jí)落到實(shí)處其實(shí)是一個(gè)很樸素的問(wèn)題哪些事你每天做一遍、規(guī)則又很固定那它們就都值得被寫(xiě)成一個(gè)腳本替你跑掉。這篇內(nèi)容想和你完整走一遍“一個(gè)Python腳本的誕生”全過(guò)程從怎么判斷需求、怎么搭環(huán)境到寫(xiě)代碼、加參數(shù)、做測(cè)試再到把它掛進(jìn)定時(shí)任務(wù)里無(wú)人值守地跑。適合兩種人看一種是剛開(kāi)始學(xué)Python、寫(xiě)過(guò)幾行語(yǔ)法但不知道怎么落地成實(shí)際工具的另一種是已經(jīng)會(huì)用Python處理小任務(wù)但每次都是“手動(dòng)跑一下”還沒(méi)把腳本真正變成日常工作里穩(wěn)定運(yùn)轉(zhuǎn)的一部分??赐昴銜?huì)發(fā)現(xiàn)自動(dòng)化沒(méi)有多神秘它拼的不是高超技巧而是你做判斷時(shí)的克制和寫(xiě)細(xì)節(jié)時(shí)的耐心。1. 需求先行不是所有重復(fù)勞動(dòng)都值得寫(xiě)成腳本1.1 判斷一個(gè)場(chǎng)景該不該自動(dòng)化的三個(gè)標(biāo)準(zhǔn)寫(xiě)腳本前先回答一個(gè)更關(guān)鍵的問(wèn)題這件事真的適合自動(dòng)化嗎我見(jiàn)過(guò)太多人熱情高漲地寫(xiě)了個(gè)自動(dòng)填表單腳本結(jié)果網(wǎng)站改版一次就廢掉也有人辛辛苦苦做了個(gè)爬蟲(chóng)跑了三天就被對(duì)方封了IP。項(xiàng)目流產(chǎn)的原因往往不是代碼不行而是需求本身選錯(cuò)了。我的經(jīng)驗(yàn)是判斷一個(gè)日常工作值不值得自動(dòng)化就套三個(gè)標(biāo)準(zhǔn)規(guī)則明確。你能用兩三句話把它的處理邏輯說(shuō)清楚沒(méi)有那么多例外和主觀判斷。比如“把下載文件夾里超過(guò)7天未打開(kāi)的文件移到歸檔目錄”規(guī)則清楚得像說(shuō)明書(shū)而“把重要的郵件挑出來(lái)匯總”什么叫“重要”本身就需要定義。頻率夠高、耗時(shí)可觀。每天一次和每年一次投入產(chǎn)出完全不同。單次耗時(shí)5分鐘、每天重復(fù)一年下來(lái)就是20多個(gè)小時(shí)如果只是每月一次且5分鐘能搞定寫(xiě)一小時(shí)腳本就得仔細(xì)掂量了。失敗影響可控。腳本跑錯(cuò)時(shí)最壞會(huì)怎樣刪幾個(gè)文件還是清空整個(gè)數(shù)據(jù)庫(kù)如果影響無(wú)法接受那就要在設(shè)計(jì)和測(cè)試上多花大力氣甚至在前期就放棄自動(dòng)化。我有個(gè)做設(shè)備老化測(cè)試的朋友他的日常工作就是盯著設(shè)備跑測(cè)試、記數(shù)據(jù)、生成報(bào)告一盯就是幾個(gè)小時(shí)。我建議他把“全自動(dòng)執(zhí)行測(cè)試并生成報(bào)告”提上日程因?yàn)檫@場(chǎng)景完全命中上述三條規(guī)則固定、每天重復(fù)、且失敗造成的只是數(shù)據(jù)采樣問(wèn)題風(fēng)險(xiǎn)可控。后來(lái)他用Python寫(xiě)了套腳本至少把人從工位上解放了出來(lái)。判斷清楚了這個(gè)自動(dòng)化才做得值。1.2 別急著寫(xiě)碼先把整個(gè)流程拆成輸入、處理、輸出確定要做之后也別打開(kāi)編輯器就敲import os。我自己的習(xí)慣是先在紙上畫(huà)一條流水線哪怕只是草草幾筆。所謂流程無(wú)非三段輸入是什么處理規(guī)則是什么輸出要變成什么。以最常見(jiàn)的“整理下載文件夾”來(lái)說(shuō)輸入一個(gè)真實(shí)目錄下的文件集合處理規(guī)則按擴(kuò)展名歸類到文檔、圖片、壓縮包、安裝包按修改時(shí)間決定是否歸檔到當(dāng)月目錄輸出移動(dòng)之后的目錄結(jié)構(gòu)還有一份“本次移動(dòng)了哪些文件”的小結(jié)。把需求拆成這三段之后你會(huì)立刻看見(jiàn)模糊的地方“文檔”具體指哪些擴(kuò)展名Excel算文檔還是數(shù)據(jù)文件移動(dòng)時(shí)文件名沖突怎么辦這些“模糊地帶”才是自動(dòng)化項(xiàng)目里真正的難點(diǎn)而不是代碼本身。一次我?guī)屯伦鰣?bào)表合并工具我以為需求就是“合并文件夾里所有Excel”結(jié)果他補(bǔ)充了五個(gè)“但是”有的表頭不在第一行有的需要跳過(guò)“合計(jì)”行還有的要按部門(mén)拆成多個(gè)子表。要不是先做了流程拆解直接開(kāi)寫(xiě)必然返工。所以這一階段的產(chǎn)出物不是代碼而是一段人話版本的說(shuō)明什么時(shí)候跑、跑之前要滿足什么條件、跑完之后應(yīng)該看到什么。這段說(shuō)明之后會(huì)變成你的README、你的注釋以及你和將來(lái)的自己之間的溝通橋梁。1.3 自動(dòng)化項(xiàng)目的“從 0 到 1”六步法這些年下來(lái)我把一個(gè)自動(dòng)化腳本從想法到穩(wěn)定的過(guò)程總結(jié)成六個(gè)步驟后面的章節(jié)就按這個(gè)順序展開(kāi)摸清現(xiàn)狀把當(dāng)前手動(dòng)操作的過(guò)程一步步走一遍記錄每一步的動(dòng)作和耗時(shí)定義范圍寫(xiě)清楚腳本管哪些文件、不管哪些文件最小實(shí)現(xiàn)先做一個(gè)只能跑一次的版本驗(yàn)證核心邏輯走通加參數(shù)和容錯(cuò)把可變的部分參數(shù)化把可能報(bào)錯(cuò)的地方接住自動(dòng)化運(yùn)行用定時(shí)任務(wù)或觸發(fā)器讓它無(wú)人值守地跑監(jiān)控與復(fù)盤(pán)日志、通知、隔段時(shí)間回看一次規(guī)則是否還適用。判斷完需求和范圍心里那顆“想立刻寫(xiě)碼”的心可以先收一收下一章先把環(huán)境這件事理順。環(huán)境問(wèn)題雖然不性感但它恰恰是腳本活不過(guò)第一周的頭號(hào)原因。2. 環(huán)境準(zhǔn)備與工程習(xí)慣別讓“跑不起來(lái)”毀掉你的熱情2.1 Python安裝與版本管理選對(duì)工具才能少踩坑現(xiàn)在的Python版本分化已經(jīng)不嚴(yán)重了但我還是建議裝3.9以上版本沒(méi)必要為了兼容老代碼而去碰Python 2。Windows用戶去官網(wǎng)下載安裝包時(shí)有一點(diǎn)要注意安裝向?qū)У谝豁?yè)那里有個(gè)“Add Python to PATH”勾選框默認(rèn)不勾請(qǐng)務(wù)必勾上。這一步對(duì)應(yīng)的就是很多人之后遇到的“python不是內(nèi)部或外部命令”的全部根源。系統(tǒng)裝好Python之后我強(qiáng)烈建議所有自動(dòng)化項(xiàng)目都用虛擬環(huán)境也就是venv。不要把包直接裝到全局環(huán)境里不然過(guò)兩個(gè)月你就會(huì)遇到“上次跑得好好的今天怎么報(bào)錯(cuò)”“這個(gè)項(xiàng)目要pandas 1.x那個(gè)項(xiàng)目要pandas 2.x”這種互踩地雷的尷尬。我自己就吃過(guò)這個(gè)虧全局環(huán)境里裝了一堆包某天升級(jí)了一個(gè)依賴庫(kù)結(jié)果三個(gè)老腳本同時(shí)報(bào)廢排查到凌晨才定位是版本沖突。創(chuàng)建項(xiàng)目目錄并啟用虛擬環(huán)境的常規(guī)操作是# 創(chuàng)建項(xiàng)目目錄 mkdir organize_files cd organize_files # 創(chuàng)建并激活虛擬環(huán)境 python -m venv venv # Windows PowerShell 下激活 venv\Scripts\activate # Linux/macOS 下激活 source venv/bin/activate激活后命令行前面會(huì)出現(xiàn)(venv)字樣之后安裝的所有包都只屬于這個(gè)項(xiàng)目不會(huì)污染系統(tǒng)環(huán)境也不怕影響別的腳本。這幾十秒的投資值。2.2 依賴鎖定與項(xiàng)目結(jié)構(gòu)腳本也需要“工程感”即使是簡(jiǎn)單的自動(dòng)化腳本我也建議至少保持一個(gè)像樣的目錄結(jié)構(gòu)避免半年后回來(lái)看代碼一頭霧水。下面是我個(gè)人慣用的骨架organize_files/ ├── organize.py ├── requirements.txt ├── README.md ├── tests/ │ └── test_organize.py └── venv/requirements.txt 的作用是把項(xiàng)目用到的第三方庫(kù)連同版本號(hào)一起鎖住。養(yǎng)成習(xí)慣每當(dāng)環(huán)境里成功裝了一批包就執(zhí)行一次pip freeze requirements.txt這樣別人拿到代碼或者你換臺(tái)電腦一條命令就能把環(huán)境重建出來(lái)pip install -r requirements.txt很多新手不建虛擬環(huán)境也不鎖版本等腳本在別人機(jī)器上跑不起來(lái)時(shí)才病急亂投醫(yī)。實(shí)際上大部分“我明明裝了啊為什么import不到”的問(wèn)題十有八九是把包裝進(jìn)了A環(huán)境、運(yùn)行腳本卻用了B環(huán)境。你在終端里敲which python看一眼再確認(rèn)當(dāng)前激活的是不是項(xiàng)目的venv思路會(huì)比瞎裝包清晰得多。另外Windows下腳本運(yùn)行時(shí)常見(jiàn)“一閃而過(guò)”的問(wèn)題我也放到這里提醒如果你雙擊的是 .bat 或 .py 文件窗口秒關(guān)不代表腳本沒(méi)跑而是跑完正常退出。想看輸出就打開(kāi)PowerShell或cmd手動(dòng)切到項(xiàng)目目錄再執(zhí)行輸出會(huì)留在終端里。用cmd跑一下cd /d D:\your_project venv\Scripts\python organize.py這樣真出異常也能看到完整的報(bào)錯(cuò)堆棧不至于兩眼一抹黑。2.3 環(huán)境變量與PATH類報(bào)錯(cuò)一個(gè)典型問(wèn)題引發(fā)的思考熱搜里那些“pnpm無(wú)法被識(shí)別”“python不是內(nèi)部或外部命令”其實(shí)都指向同一個(gè)底層概念操作系統(tǒng)的PATH環(huán)境變量。PATH里記錄了系統(tǒng)在哪個(gè)目錄下找可執(zhí)行程序裝軟件時(shí)沒(méi)把安裝路徑加進(jìn)PATH或者加了之后沒(méi)有重新打開(kāi)終端就會(huì)出現(xiàn)“明明裝了但命令找不到”的現(xiàn)象。我遇到過(guò)同事在PowerShell里裝好了一個(gè)工具立刻運(yùn)行卻報(bào)“無(wú)法將 x 項(xiàng)識(shí)別為 cmdlet、函數(shù)、腳本文件或可運(yùn)行程序的名稱”。我先問(wèn)他你是不是沒(méi)開(kāi)新終端他重開(kāi)了一個(gè)之后問(wèn)題果然消失。因?yàn)槊钚械沫h(huán)境變量是在啟動(dòng)時(shí)讀取的老窗口還保存著舊狀態(tài)。這些經(jīng)驗(yàn)放在Python里是完全相通的安裝完P(guān)ython后要新開(kāi)終端virtualenv切換后要注意當(dāng)前shell環(huán)境pip裝完了新包但腳本還是找不到模塊時(shí)優(yōu)先懷疑是不是沒(méi)有在同一個(gè)解釋器環(huán)境下執(zhí)行。同一個(gè)原則也適用于排查各種腳本類工具鏈問(wèn)題先確認(rèn)進(jìn)程用的是哪個(gè)解釋器/運(yùn)行時(shí)再討論版本和依賴這是所有環(huán)境類排障的統(tǒng)一套路。3. 第一個(gè)腳本的完整誕生以批量文件整理為例3.1 需求實(shí)例化給腳本定行為邊界理論說(shuō)了一堆現(xiàn)在落到實(shí)打?qū)嵉拇a上。我用“整理下載文件夾”這個(gè)最容易上手的場(chǎng)景來(lái)走完整流程。先描述需求D:\Downloads實(shí)際請(qǐng)換成你自己的目錄里有各種散亂文件腳本要按擴(kuò)展名把它們分到文檔、圖片、壓縮包、安裝包等子目錄同時(shí)按文件的最后修改時(shí)間歸入對(duì)應(yīng)月份的二級(jí)目錄里比如文檔/2024-05。運(yùn)行之后屏幕打印出每個(gè)文件從哪移到哪以及本次共處理多少文件。這里我先定義幾個(gè)行為的邊界只處理常規(guī)文件不處理子目錄遇到同名文件不覆蓋而是追加時(shí)間戳腳本要內(nèi)置一個(gè)“預(yù)覽模式”只打印計(jì)劃不實(shí)際移動(dòng)文件。第3條尤其重要。新手寫(xiě)自動(dòng)化文件操作時(shí)最容易犯的錯(cuò)就是直接動(dòng)手改文件跑完才發(fā)現(xiàn)歸檔規(guī)則有誤文件已經(jīng)散布到幾十個(gè)目錄里去了。dry-run 模式相當(dāng)于給腳本裝了個(gè)安全閥我強(qiáng)烈建議所有涉及刪除、移動(dòng)、重命名的腳本都做這個(gè)設(shè)計(jì)。3.2 代碼實(shí)現(xiàn)用pathlib而不是os.pathPython 3.4以后Pathlib成為操作路徑的主流方式比起os.path.join、os.listdir的組合Pathlib的可讀性好得多而且跨平臺(tái)。下面的代碼可以直接復(fù)制保存為organize.pyimport argparse import shutil import sys from datetime import datetime from pathlib import Path CATEGORY_RULES { 文檔: [.pdf, .doc, .docx, .txt, .md, .xls, .xlsx, .ppt, .pptx], 圖片: [.jpg, .jpeg, .png, .gif, .bmp, .webp, .svg], 壓縮包: [.zip, .rar, .7z, .tar, .gz, .bz2], 安裝包: [.exe, .msi, .dmg, .pkg, .deb, .rpm], } def get_category(ext: str) - str: ext ext.lower() for category, exts in CATEGORY_RULES.items(): if ext in exts: return category return 其他 def build_target_path(source: Path, target_base: Path, category: str, ext: str) - Path: month_folder source.stat().st_mtime month_str datetime.fromtimestamp(month_folder).strftime(%Y-%m) target_dir target_base / category / month_str target_dir.mkdir(parentsTrue, exist_okTrue) target_file target_dir / source.name if target_file.exists(): stem source.stem suffix source.suffix timestamp datetime.now().strftime(%H%M%S) target_file target_dir / f{stem}_{timestamp}{suffix} return target_file def organize(source_dir: Path, target_dir: Path, dry_run: bool True) - None: if not source_dir.exists(): print(f源目錄不存在: {source_dir}) sys.exit(1) moved_count 0 for item in source_dir.iterdir(): if not item.is_file(): continue category get_category(item.suffix) target build_target_path(item, target_dir, category, item.suffix) if dry_run: print(f[預(yù)覽] {item.name} - {target.relative_to(target_dir)}) else: shutil.move(str(item), str(target)) print(f[移動(dòng)] {item.name} - {target.relative_to(target_dir)}) moved_count 1 print(f共整理 {moved_count} 個(gè)文件。) if __name__ __main__: parser argparse.ArgumentParser(description按類型和日期整理文件夾) parser.add_argument(--source, typePath, defaultPath.home() / Downloads, help要整理的源目錄) parser.add_argument(--target, typePath, defaultPath.home() / Downloads_Sorted, help歸檔目標(biāo)目錄) parser.add_argument(--dry-run, actionstore_true, help只預(yù)覽不執(zhí)行) args parser.parse_args() organize(args.source, args.target, args.dry_run)這段代碼有四個(gè)值得注意的細(xì)節(jié)第一get_category里先統(tǒng)一轉(zhuǎn)小寫(xiě)避免.PDF和.pdf被當(dāng)成兩種類型第二build_target_path里用source.stat().st_mtime讀取文件的最后修改時(shí)間再用datetime.fromtimestamp轉(zhuǎn)成年月字符串這樣歸檔目錄會(huì)自然按時(shí)間形成層級(jí)第三重名沖突沒(méi)有選擇覆蓋而是追加當(dāng)前時(shí)間戳這個(gè)策略雖然沒(méi)有那么“優(yōu)雅”但在真實(shí)文件系統(tǒng)里最保險(xiǎn)第四shutil.move參數(shù)我都轉(zhuǎn)成了字符串形式為的是避免某些第三方庫(kù)對(duì) Path 對(duì)象兼容性不好的邊緣情況。3.3 用dry-run驗(yàn)證邏輯之后才動(dòng)真格首次運(yùn)行先別直接移動(dòng)文件python organize.py --source D:\Downloads --target D:\Downloads_Sorted --dry-run終端會(huì)列出所有計(jì)劃執(zhí)行的動(dòng)作。仔細(xì)掃一眼輸出看看擴(kuò)展名分類對(duì)不對(duì)有沒(méi)有該歸檔但被歸到“其他”的文件有沒(méi)有規(guī)則里沒(méi)覆蓋到的格式。確認(rèn)沒(méi)問(wèn)題之后去掉--dry-run再跑一次python organize.py --source D:\Downloads --target D:\Downloads_Sorted我實(shí)際跑的時(shí)候發(fā)現(xiàn)真實(shí)文件夾里“其他”類別增長(zhǎng)很快因?yàn)楦鞣N無(wú)擴(kuò)展名文件、臨時(shí)文件.tmp、日志文件.log都堆在那里。如果你也遇到這種情況可以在CATEGORY_RULES里繼續(xù)補(bǔ)充規(guī)則比如日志文件屬于“日志”臨時(shí)文件直接放入“臨時(shí)”。規(guī)則是人根據(jù)現(xiàn)實(shí)迭代出來(lái)的腳本也會(huì)越長(zhǎng)越順手。這個(gè)例子雖然簡(jiǎn)單但它已經(jīng)覆蓋了Python自動(dòng)化的骨架路徑遍歷、規(guī)則分類、目標(biāo)計(jì)算、安全預(yù)覽、參數(shù)入口。后面要讓它自動(dòng)運(yùn)行其實(shí)已經(jīng)水到渠成。4. 從手動(dòng)到自動(dòng)讓腳本在沒(méi)人記得它時(shí)也在工作4.1 Windows環(huán)境下的定時(shí)運(yùn)行三件套腳本本身寫(xiě)好了但如果你每次都手動(dòng)打開(kāi)終端執(zhí)行自動(dòng)化還只完成了一半。真正的自動(dòng)化是讓腳本自己按點(diǎn)或按事件跑起來(lái)。Windows上我常用三種方式從推薦程度排序任務(wù)計(jì)劃程序Task Scheduler圖形界面適合不想記命令的人。新建任務(wù)時(shí)觸發(fā)器設(shè)為“每天”或“計(jì)算機(jī)啟動(dòng)時(shí)”操作選“啟動(dòng)程序”程序填venv\Scripts\python.exe的完整路徑參數(shù)填organize.py的完整路徑“起始于”填項(xiàng)目目錄。schtasks 命令適合快速注冊(cè)。管理員權(quán)限的cmd里執(zhí)行類似下面的命令schtasks /Create /SC DAILY /TN OrganizeDownloads /TR D:\organize_files\venv\Scripts\python.exe D:\organize_files\organize.py --no-dry-run /ST 18:00PowerShell開(kāi)機(jī)自啟腳本把 .bat 放進(jìn)shell:startup文件夾。簡(jiǎn)單直接但只能等用戶登錄后才運(yùn)行。批處理內(nèi)容我一般這樣寫(xiě)echo off cd /d D:\organize_files venv\Scripts\python.exe organize.py --no-dry-run organize.log 21提醒一句用任務(wù)計(jì)劃程序時(shí)很多人會(huì)默認(rèn)勾選“不管用戶是否登錄都要運(yùn)行”這個(gè)時(shí)候系統(tǒng)要求你填Windows賬號(hào)密碼而且運(yùn)行環(huán)境是Session 0部分依賴網(wǎng)絡(luò)驅(qū)動(dòng)器或GUI的程序會(huì)異常。如果你的腳本只是處理本地文件選“只在用戶登錄時(shí)運(yùn)行”其實(shí)更穩(wěn)。4.2 Linux/macOS下的cron與launchd如果你跑腳本的機(jī)器是Linux服務(wù)器或者公司配的Mac更常見(jiàn)的方案是cron。用crontab -e編輯當(dāng)前用戶的定時(shí)任務(wù)舉例# 每天 18:30 執(zhí)行整理腳本輸出寫(xiě)入日志 30 18 * * * cd /home/user/organize_files /home/user/organize_files/venv/bin/python organize.py --no-dry-run organize.log 21這里面有個(gè)常見(jiàn)誤區(qū)cron執(zhí)行時(shí)環(huán)境變量很少PATH幾乎為空所以命令里最好用絕對(duì)路徑。直接寫(xiě)python很容易出現(xiàn)“找不到命令”。還記得前面說(shuō)的環(huán)境變量問(wèn)題嗎這里又是同一個(gè)根源。macOS的圖形化場(chǎng)景用launchd配置一個(gè)plist文件放到~/Library/LaunchAgents下再launchctl load就能常駐運(yùn)行。日常辦公自動(dòng)化的需求cron通常就夠用了launchd適合需要更精細(xì)控制場(chǎng)景的進(jìn)階用戶。4.3 讓腳本學(xué)會(huì)“說(shuō)話”日志與異常通知無(wú)人值守運(yùn)行里最尷尬的事是腳本跑掛了卻沒(méi)人知道。所以腳本不僅要會(huì)做事還要會(huì)留下記錄、會(huì)在出事時(shí)喊人。最簡(jiǎn)單的做法是在調(diào)度的命令里把輸出重定向到日志文件就像前面bat里寫(xiě)的那樣。但如果想更進(jìn)一步我建議在Python代碼里使用內(nèi)置的logging模塊按需把信息寫(xiě)到文件并設(shè)置等級(jí)import logging logging.basicConfig( filenameorganize.log, levellogging.INFO, format%(asctime)s %(levelname)s %(message)s, encodingutf-8 )把原來(lái)print的地方改成logging.info(...)、logging.warning(...)。普通運(yùn)行只有幾行INFO異常時(shí)能留下完整的堆棧。我自己的習(xí)慣是本地手動(dòng)跑時(shí)在終端看輸出定時(shí)任務(wù)運(yùn)行時(shí)看日志文件真正重要的腳本再加上異常通知。異常通知的落地方式很多郵件SMTP和各類webhook機(jī)器人是最常見(jiàn)的。關(guān)鍵點(diǎn)是只在異常時(shí)通知?jiǎng)e把每條信息都發(fā)出來(lái)——如果每天定時(shí)任務(wù)正常跑卻發(fā)給你一封“今天移了42個(gè)文件”的郵件時(shí)間一長(zhǎng)你就會(huì)把通知當(dāng)成垃圾真正出事時(shí)反而被忽略。只有失敗才響警報(bào)才是對(duì)“通知”這一渠道的正確使用。4.4 無(wú)人值守的關(guān)鍵腳本的冪等性設(shè)計(jì)再補(bǔ)一個(gè)很多人忽略的重要概念冪等性。就是說(shuō)同一個(gè)腳本無(wú)論被連續(xù)跑多少遍結(jié)果都應(yīng)該保持一致、不產(chǎn)生臟狀態(tài)。用整理文件舉例第一次跑把散亂文件歸檔了第二次跑如果腳本又重新把源目錄里的文件“重復(fù)移動(dòng)一遍”那是沒(méi)問(wèn)題的因?yàn)樵茨夸浺呀?jīng)沒(méi)文件了。但如果腳本設(shè)計(jì)成“把目標(biāo)目錄里的文件再按另一個(gè)規(guī)則處理”或者“把每個(gè)文件復(fù)制一份”跑兩次就會(huì)復(fù)制出兩份這就是糟糕的冪等性。我的原則很簡(jiǎn)單腳本運(yùn)行時(shí)先做“是否還有待處理對(duì)象”的判斷而不是無(wú)條件執(zhí)行全套動(dòng)作。例如定時(shí)同步類、清理類腳本都應(yīng)該以“當(dāng)前狀態(tài)下還有什么要做”為導(dǎo)向而不是“我把預(yù)設(shè)動(dòng)作做一遍就完”。5. 再往前走一步工具鏈、測(cè)試與邊界5.1 從單腳本到工具鏈參數(shù)化與配置分離第一個(gè)版本跑通后你會(huì)很快發(fā)現(xiàn)需求變化的苗頭今天要整理下載文件夾明天要整理桌面的單個(gè)目錄后天又要給歸檔文件加一層“客戶名”目錄。如果這些變化全靠改代碼遲早要亂。這時(shí)候就該做參數(shù)化與配置分離。所謂配置分離就是把“規(guī)則”從“邏輯”里拿出來(lái)。比如分類規(guī)則可以進(jìn)一步挪到JSON或YAML文件里代碼只負(fù)責(zé)讀配置、執(zhí)行動(dòng)作。工具選型上如果參數(shù)開(kāi)始變多可以把a(bǔ)rgparse換成click通過(guò)裝飾器定義參數(shù)可讀性會(huì)好很多如果項(xiàng)目要做批量操作、定時(shí)任務(wù)分發(fā)再考慮引入啟動(dòng)腳本或pipeline式編排。另外順帶說(shuō)一句不只命令行有“腳本”概念。像Illustrator這類設(shè)計(jì)軟件也有開(kāi)源的腳本擴(kuò)展生態(tài)本質(zhì)上是把重復(fù)的批量導(dǎo)圖、批量改圖層名操作交給代碼。如果你經(jīng)常碰這類軟件不妨留意下它們的腳本接口凡是兩分鐘以上的重復(fù)手工動(dòng)作基本都有一條腳本化的路。我見(jiàn)過(guò)很多Python自動(dòng)化項(xiàng)目死在“只寫(xiě)執(zhí)行、不寫(xiě)維護(hù)”上。腳本剛寫(xiě)成時(shí)充滿成就感但三個(gè)月后回來(lái)看當(dāng)初那句“這里我以后再補(bǔ)”的注釋已經(jīng)變成了一筆技術(shù)債。所以參數(shù)化和注釋不是給別人的是給三個(gè)月后的自己的。5.2 用pytest給自動(dòng)化腳本上保險(xiǎn)自動(dòng)化代碼和普通業(yè)務(wù)代碼有個(gè)明顯區(qū)別它跑起來(lái)的時(shí)候往往沒(méi)有人盯著。白天你寫(xiě)業(yè)務(wù)代碼跑掛了立刻有報(bào)錯(cuò)但半夜兩點(diǎn)定時(shí)任務(wù)跑掛可能直到三天后你才發(fā)現(xiàn)三天前的數(shù)據(jù)沒(méi)處理。所以自動(dòng)化腳本比一般代碼更需要自動(dòng)化測(cè)試。對(duì)上面這個(gè)整理例子的organize.py我會(huì)為關(guān)鍵的規(guī)則邏輯寫(xiě)pytest測(cè)試import pytest from organize import get_category, build_target_path def test_get_category_pdf(): assert get_category(.PDF) 文檔 def test_get_category_unknown_extension(): assert get_category(.xyz) 其他 def test_build_target_path_reuses_existing_month_folder(tmp_path): source tmp_path / report.pdf source.write_bytes(bfake pdf) target build_target_path(source, tmp_path / sorted, 文檔, .pdf) assert target.parent.name 2024-01 assert target.parent.parent.name 文檔像pytest這類自動(dòng)化測(cè)試框架日常工作里最大的價(jià)值就是允許你頻繁、安全地改代碼。文件分類規(guī)則未來(lái)一定會(huì)變比如增加新擴(kuò)展名、調(diào)整目錄層級(jí)。如果沒(méi)有測(cè)試每次改動(dòng)都心驚膽戰(zhàn)有了測(cè)試之后執(zhí)行一下pytest綠了就是穩(wěn)妥了。我給自己的項(xiàng)目定了個(gè)底線規(guī)則涉及文件刪除、移動(dòng)、網(wǎng)絡(luò)請(qǐng)求的腳本至少給核心函數(shù)寫(xiě)10個(gè)左右的測(cè)試用例。這不需要花多少時(shí)間卻能避免絕大多數(shù)低級(jí)回歸。5.3 GUI與瀏覽器自動(dòng)化工具怎么選克制是最高級(jí)的自動(dòng)化前面講的都是處理“文件”和“數(shù)據(jù)”層面日常工作里還有一類場(chǎng)景是“操作界面”比如登錄網(wǎng)頁(yè)下載報(bào)表、在軟件里點(diǎn)按鈕導(dǎo)出數(shù)據(jù)。這類需求有很成熟的工具棧瀏覽器自動(dòng)化的Playwright、Selenium移動(dòng)端有Appium、maestro甚至還有影刀RPA、Cheese這類面向業(yè)務(wù)人員的低代碼自動(dòng)化工具。但我要說(shuō)一句逆耳的話GUI自動(dòng)化是自動(dòng)化里維護(hù)成本最高、坑最多的一類能不碰盡量不碰。原因也很直白界面是為人類設(shè)計(jì)的按鈕位置、窗口大小、網(wǎng)絡(luò)延遲都會(huì)讓腳本失靈。你寫(xiě)20行代碼讓瀏覽器自動(dòng)點(diǎn)一個(gè)按鈕需求方一句話“頁(yè)面改版了”你的20行代碼就得從選擇器開(kāi)始重寫(xiě)。這類工具還有“模擬鼠標(biāo)操作桌面軟件”的方向我見(jiàn)過(guò)有人問(wèn)股票軟件能不能用鼠標(biāo)自動(dòng)化去代替手工操作我的建議非常明確不要做。一方面行情波動(dòng)瞬息萬(wàn)變腳本處理異常的能力遠(yuǎn)不如人另一方面繞過(guò)軟件正常交互流程去模擬操作很可能違反軟件的用戶協(xié)議。如果真要盯盤(pán)或做策略回測(cè)優(yōu)先找官方API或官方允許的擴(kuò)展方式這才是可持續(xù)的路。如果確實(shí)需要GUI自動(dòng)化我建議用瀏覽器優(yōu)先方案Playwright帶無(wú)頭模式、自動(dòng)等待、網(wǎng)絡(luò)斷言穩(wěn)定性比早期工具好很多同時(shí)做足等待策略和失敗重試。能用官方接口實(shí)現(xiàn)的永遠(yuǎn)優(yōu)先于界面自動(dòng)化能改業(yè)務(wù)流程省掉的永遠(yuǎn)優(yōu)先于寫(xiě)代碼硬扛。5.4 關(guān)于合規(guī)與邊界有些“自動(dòng)化”真的不能碰聊到自動(dòng)化就必須面對(duì)一個(gè)現(xiàn)實(shí)有些需求表面上是“效率工具”實(shí)質(zhì)越界了。比如某些攻擊類腳本、游戲作弊類腳本以及未經(jīng)授權(quán)抓取他人數(shù)據(jù)的爬蟲(chóng)這類東西我沒(méi)有立場(chǎng)教你也不會(huì)在文章里給任何實(shí)現(xiàn)思路。它們對(duì)你的職業(yè)生涯和技術(shù)能力積累沒(méi)有任何正收益反而會(huì)帶來(lái)實(shí)實(shí)在在的風(fēng)險(xiǎn)。哪怕是看著人畜無(wú)害的數(shù)據(jù)抓取也要先看目標(biāo)站點(diǎn)是否有官方API、是否有明確的服務(wù)條款。我遇到過(guò)“自動(dòng)化爬取頁(yè)面時(shí)遇到woff字體混淆、頁(yè)面數(shù)據(jù)抓出來(lái)是亂碼”的求助這種技術(shù)本質(zhì)上是在和反爬體系對(duì)抗。正確姿勢(shì)是退一步查官方開(kāi)放平臺(tái)、合作關(guān)系或換個(gè)有授權(quán)數(shù)據(jù)的渠道。技術(shù)方案再巧妙如果前提不成立結(jié)果都是白費(fèi)還可能惹上麻煩。規(guī)則不清晰時(shí)不要抱著僥幸心理硬上這是我在這行非常強(qiáng)烈的建議。6. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄6.1 腳本一閃而過(guò)、命令找不到、路徑報(bào)錯(cuò)自動(dòng)化腳本跑不起來(lái)的原因說(shuō)來(lái)說(shuō)去就那幾類。我整理了一張速查表遇到問(wèn)題先按表排查癥狀最常見(jiàn)原因處理方式雙擊bat一閃而過(guò)腳本跑完正常退出輸出沒(méi)來(lái)得及看打開(kāi)cmd手動(dòng)執(zhí)行或末尾加 pausepython不是內(nèi)部或外部命令安裝時(shí)沒(méi)勾選Add Python to PATH安裝Python時(shí)勾選或手動(dòng)添加環(huán)境變量pip安裝包后腳本仍ImportError裝錯(cuò)了解釋器環(huán)境全局 vs venv命令行確認(rèn) which python激活正確venvPermissionError文件被占用或當(dāng)前用戶無(wú)寫(xiě)權(quán)限關(guān)閉占用程序檢查目錄權(quán)限必要時(shí)用管理員權(quán)限讀取文件名亂碼/UnicodeDecodeErrorWindows下默認(rèn)編碼問(wèn)題打開(kāi)文件時(shí)顯式指定 encodingutf-8定時(shí)任務(wù)沒(méi)有執(zhí)行計(jì)劃任務(wù)里的程序/參數(shù)沒(méi)用絕對(duì)路徑檢查任務(wù)屬性程序填venv里的python絕對(duì)路徑工具命令無(wú)法被識(shí)別如pnpm、Python等PATH未配置或終端還是舊窗口重新打開(kāi)終端檢查環(huán)境變量pip下載超時(shí)網(wǎng)絡(luò)到源站不穩(wěn)定配置國(guó)內(nèi)鏡像源比如清華PyPI鏡像這里想特別展開(kāi)兩個(gè)高頻問(wèn)題。第一個(gè)是編碼問(wèn)題Windows下Python讀取文件或文件名時(shí)經(jīng)常碰到UnicodeDecodeError。解決方案就是前面表里寫(xiě)的所有打開(kāi)文件的操作盡量顯式寫(xiě)encodingutf-8必要時(shí)對(duì)讀取的文件名做容錯(cuò)處理。第二個(gè)是“定時(shí)任務(wù)沒(méi)跑”的排查順序先手動(dòng)執(zhí)行一遍任務(wù)里的命令看能否正常完成再確認(rèn)計(jì)劃任務(wù)的觸發(fā)器設(shè)置是否正確最后看程序是否用了絕對(duì)路徑。絕大多數(shù)定時(shí)任務(wù)問(wèn)題三步之內(nèi)就能定位。6.2 文件操作類腳本的“后悔藥”方案操作文件的腳本我建議在架構(gòu)上就給它鋪好后路。除了前面講過(guò)的dry-run還可以在移動(dòng)前先把原文件路徑記在一份日志或CSV里這樣即使出了亂子也能照著清單恢復(fù)。有人可能覺(jué)得這是“多此一舉”但真經(jīng)歷過(guò)一次誤移動(dòng)幾百個(gè)文件的痛苦就會(huì)明白這多出來(lái)的兩三行代碼有多值錢(qián)。除此之外涉及刪除操作的腳本我默認(rèn)不提供物理刪除能力而是移到一個(gè)名為trash的目錄定期人工清理。刪除是危險(xiǎn)操作中最危險(xiǎn)的一種它發(fā)生在毫秒之間后悔程度卻可以持續(xù)很久。讓腳本慢半拍、多留一步緩沖這不是笨是對(duì)真實(shí)文件系統(tǒng)的敬畏。6.3 我的排障心法二分法與最小復(fù)現(xiàn)最后分享一個(gè)通用的排障思路當(dāng)腳本報(bào)錯(cuò)但又說(shuō)不清哪里錯(cuò)時(shí)不要盯著幾百行代碼反復(fù)看而是用二分法找問(wèn)題。具體做法是先確認(rèn)腳本在哪一行開(kāi)始輸出與預(yù)期不符加幾個(gè)關(guān)鍵位置的調(diào)試打印或者復(fù)制出一段“最小復(fù)現(xiàn)”的sample數(shù)據(jù)人為觸發(fā)問(wèn)題。把問(wèn)題范圍從“整個(gè)項(xiàng)目”縮到“一個(gè)函數(shù)”再到“一行代碼”通常速度最快。我在調(diào)試那個(gè)文件整理腳本時(shí)曾遇到“有的文件歸檔成功有的文件靜默消失了”。當(dāng)時(shí)我沒(méi)有直接懷疑代碼邏輯而是把消失的那個(gè)文件路徑單獨(dú)拿出來(lái)跑了一遍這才發(fā)現(xiàn)目標(biāo)目錄的月份子目錄創(chuàng)建失敗導(dǎo)致shutil.move拋異常被上層邏輯吞掉了。發(fā)現(xiàn)過(guò)程沒(méi)什么神奇就是通過(guò)打印每步的實(shí)際狀態(tài)把范圍一步步縮到那個(gè)目錄權(quán)限上。這個(gè)習(xí)慣后來(lái)幫我省了無(wú)數(shù)時(shí)間。最后一點(diǎn)真實(shí)體會(huì)一個(gè)腳本真正成熟的標(biāo)志不是它第一天跑通時(shí)的興奮而是它連續(xù)運(yùn)行一個(gè)月后你幾乎忘記它的存在。我后來(lái)給整理腳本加上了日志、異常郵件提醒和pytest測(cè)試它就像一個(gè)沉默的值班員每天在固定時(shí)刻出現(xiàn)把那些瑣碎但必須做的事情處理完。自動(dòng)化帶給我的解放感不是“我再也不用做這些事了”而是“我終于有精力去做那些機(jī)器做不了的事了”。如果你正打算動(dòng)手寫(xiě)第一個(gè)腳本我的建議是從最小的場(chǎng)景開(kāi)始先讓它跑起來(lái)再逐步優(yōu)化。好的自動(dòng)化項(xiàng)目從來(lái)都是長(zhǎng)出來(lái)的不是一開(kāi)始設(shè)計(jì)出來(lái)的。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美的精品的视频| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 偷拍导航视频网站| 麻豆一区在线| 裸体美女久久久| 四虎884a| 欧美在线干| 成人性交午夜免费片| 极品色综合| 国产精品99999| 中文字幕,人妻,日韩| 乱伦av麻豆| 嫖老熟女A片一二三区| AV在线资源| 日韩熟妇二区| 国产11页| 国产精品久久久久久久久久久久久久久久| 精品超碰国产| 欧美精品丝袜久久久中文字幕| 国内伊人久久久久久网站视频| 欧美天天干| 日韩无码黄色片| 黄色一级视| 人妻少妇精品久久久| 在线 欧美 亚洲| 蜜桃天美传媒AV一区二区三区| 麻豆尤物视频网| 污色区网站| 国产熟女免费观看久久| 另类图片五月| 精品少妇高潮久久| 久久精品国产亚洲AV高级北京| 99热在线观看| 97亚洲综合在线| 欧美一区二区三区四区综合| 国产精品白虎| 久久大黄片| 五月丁香激情综合网| 国产精品97超碰| 高潮毛片无遮挡高清免费| 爱爱动态120秒| 一区二区影视| 亚洲激情在线| 丝袜综合网| 日本福利社| 99精品综合久久久久五月天| 日本高清一区二区在线| 色噜噜国产在线| 精品国产乱码久久久影院| 国产成人自拍视频视频| 伊人精品视频| 日韩精品第3页| 人妻天天爽| 99re6在线视频播放免费精品| 囯产精品久久久久久久久久梁医生 | 91 偷| 久久99午夜精品一区人妻| 欧洲无码一区二区| 精品中文日韩字幕视频| 97在线观看播放视频| 久久久亚洲熟妇资源| 久久啊啊| 97人妻色| 久久五月天婷婷丁香中文字幕| 男人天堂综合| 国产精品久久伊人| 国产捆绑一区| 天天操人人操骚逼网站| 99操逼| 亚洲中文字幕熟女| 九九九九一级| 久草综合京东| 91爆操视频| 日韩少妇无码| 国产精品另类| 二三四区精品| 欧美色图亚洲色图成人在在线| 制度丝袜99| 久久久久白虎| 综合色久欲| 亚洲国产一级中文综合久久天堂在线免费观看| 国产第12页| 久久人妻| 午夜在线播放| 视频在线97| 久久久禁| 神马久久69| 伊人影院在线理论播放| 夂久色| 九九综合| 久久9精品网站| 9九九九九视频在线观看| 中文字幕三四五区| 亚洲国产成人福利在线观看| 综合婷婷| 久久久精久久久| 国产67194| 日韩啪啪视频| 少妇高潮喷水无套久久久久久| 99在线视频播放| 99999这里都精品| 亚洲导航深夜福利| 18啪啪手机免费性爱| 91久久久亚洲| 日本不卡一区二区| 久久 国产 无码| 一级毛片久久久久久久女人18| 色综合一本| 欧美片第一页| 午夜激情成人在线观看| 奇米狠999| 日本韩欧美在线播放a| 大香蕉人妻| 密臀在线免费观看| 大屁股国产在线视频| 久久精品操| 97超碰色| 成人三一级一片aaa| 免费看一级a性色生活片久久无| AV中文在线| 天天做天天爱天天爽AV| 国产自啪精品视频网站黑丝| 射久久| 色狠狠 - 百度| 丁香色色网| 人人操人人操人人人操| 精品国产网站| 麻豆国产视频精品观看| 亚洲熟女乱色| 久久av成人无码免费| 内射中出日韩在线观看视频| 熟女精品日韩一区二区三区| 久久国产99精品72福利 | 性videos欧美熟妇hdx| 口爆综合网| 亚洲综合网91| 性九九九九九九| 国产亚洲女v在线观看| 99re6国产精品99re| 色就色综合| 99九九久久| 青椒国产97在线熟女| 亚洲日韩XXX| 久久九九国产精品| 久久免费9| 综合色图亚洲欧美| 日韩999| 国产精品久久久久久久久久久久久久| 96久久科窝| 国产美女销魂在线观看不卡| 欧美色道啊| 91人人看| 97资源制服丝袜| 日韩欧美亚洲自拍偷拍| 97超碰人操| 99热精品在线播放| 国产亚洲精品玖玖玖在线观看| 黄页网站成人免费| 97玖玖超碰| 中文字幕性感少妇av| 69麻豆天美| 熟妇高潮精品一区二区三区下载| 久久婷综合| 被操高清无码视频| 淫纸中9区| 欧美亚洲激情小说| 浪人综合网| 91爱| 国产热av| 日本顶级天天操狠狠操夜夜操中文字幕| 岛国黄色大片网站| 久久婷婷电影网| 日本黄色天堂| 大乔未久88一区| 天天综合日韩网| 99性爱在线观看| 亚洲欧美不卡线| 少妇色综合| 91欧美美女日韩国产婷婷| 九九99精品| 国产精品无码av| 色综合一本| 人人澡人人干| 视频二区美腿制服人妻欧美| v91av| asc国产精品| 伊人伊人LD| 国产精品天美传媒| 欧美综合站| 免费观看啪视频| 欧美综合娱乐久久| 啪啪性爱免费视频| 日韩免费av片高清无码| 丁香六月激情| 欧美一区二区一级岛国大片| 亚洲爽图| 欧在线一二区| 国产精品久久蜜乳av| 人人操超碰在线| 欧美影音在线| 人人摸人人舔一区二区| 日日骚av| 后入精品| 亚洲欧美黄| 偷拍盗拍亚洲色图图片| 9Ⅰ超碰| 一区二区影视| 亚洲精品乱码线路中文字幕| 国产乱色国产精品免费视| 丁香五六月啪啪| 内射老妇BBWX0C0CK| 亚洲日韩天堂| AV乱伦国产| 欧美一级AAAAAAA| 中文字幕精品探花视频| 97超碰磁| 日本一区视频在线观看| 日本一区视频在线观看| 可以在线观看的黄色网址| 老熟妇一区二区三区…| 黑人无码一区二区| 日日干夜夜干| 日韩欧美中文字| 人妻无码视频一区二区三区久久| 综合久久2017| 女人与公拘交酡2020视频| 激情五月综合开心五月| 亚洲av无码成人精品国产| 久久婷婷色| 盗摄 精品 另类 一区| 情色AV电影| 欧美欲色| 天堂综合| 青青草大香蕉视频| 国产成人91一区二区三区| 99久久精品欧美国产| 乱伦色图网址是多少| 国产一级不卡在线观看| 97天天搞在线| 亚洲极品| 无码精品久久久久久亚洲| 性爱免费视频成人| 99久久久| 国产精品久久久777| 风月影院男女十八禁| 99少妇| 一级乱伦网站| 婷婷亚洲综合| 校园春色综合香蕉| jizz啪啪| 99热综合| 少妇色综合| 神马麻豆福利院| 高潮毛片无遮挡高清免费| 久久性爱免费送| 亚射在线| 97国产人人| 亚洲综合精品国产一区| 久草精品国产蜜臀| 啊啊啊免费| wwwcaobibi| 按摩中文字幕| 欧美色图20P| 91国产操逼视频| 久久久久久久人妻| 亚洲少妇免费视频\| 91综合网| 男人的天堂2019AV| 亚洲国产精品99久久久| 亚洲精品久| 中文无线日韩一区| 日韩精品 视频一区二区| 97资源制服丝袜| 九九九草| 黄色AAAAAAAAAAA大片| 九一亚洲国产免费| 天天肏视频| 91狠狠综合久久久| 人妻夜爽夜夜爽| 久久久亚洲欧美综合| 区一在线观看| 国产91 丝袜在线播放00-百度| 丰满高潮18xxxx| 久久中出在线| 成人精品久久久午夜福利| 欧美日韩性感| 一区二区三| www.色99| 校园春色五月天| 亚洲色啪| 亚洲欧美在线丝袜| 噜噜在线| 亚洲欧美人妻| 骚乳在线| 风流老熟女一区二区三区l| 亚洲中文字幕日产无码久久| 亚洲 欧美 制服 另类 自拍| 美女网站黄页| 日本肉体xxxx裸交| AV女优男人的天堂| 中文无码一二三区| 日韩精品人妻| 特级大荫道BBwBBwBBW| 免费操逼91| 青青草原人妻| WWW啪啪的com| 国产又大又粗又长视频| 久久久久9999| 国产不良强奸视频免费看| 大香蕉色网| 国产h片在线观看视频| 91男人天堂网| 中文字幕精品一区二区精品| 欧美一级AAAAAAA| 农村妇女精品一区二区| 视频分类 国内精品| 欧美人妻一区二区| 亚洲 日本 一 二 三| 欧美综合第一页| 久久理论字幕视频| 一区二区影院| 国产日韩怡红院| 国产成人资源| 欧美性爱日韩性爱| 一级AAA片一区二区三区| 日韩乱码Av| 无码人妻精品一区二区三区99不卡 | www.99视频| 家庭乱伦国产精品| 97久操| 抽查国产福利主播| 日本高清有码网址视频| 亚洲精品97| 美性中文综合网| 亚洲福利中文字幕在线| 9色国产精品一区粉嫩| 久久日本熟女精品一区| 丁香五月天啪啪| 超清福利精品视频在线| 天美91| 久操av在线| 1区2区3区在线视频| 国产一区在线观看无码AV| 久久久久久久久久久精| 色五月天AV| 99色综合| 国产高潮AA片免费看| 亚洲一区中文精品| 成人性交免费视屏| 色麻豆AV| 91亚州欧美| 97五月天| 美女被艹尤物视频| 中文字幕亚洲永久精品| 秋霞操逼片| 久久啊啊| 老鸭窝成人免费毛片视频| 91五月天| 上床不卡网站| 亚洲国产综合久久天堂| 欧美成人都市人妻| 人妻久久久久久久久久久久久久久 | av无码av无码专区| 国产91av在线播放| 老熟女搡BBBB搡BBBB视频| 欧美 色 亚洲| 日韩欧美蜜桃精品久久中文字幕久久| 97精品国产97久久久久久| www成人啪啪18秘 免费| 成人麻豆av电影网站| 成年无码动漫av片无尽在线 | 99热综合| 日韩啪啪啪啪啪| 亚洲精品久久久久久久蜜桃臀| 性爱乱伦视频免费| 国产黄色在线播放观看| 91精品人妻偷情| 精品人妻一区二区三区四区不卡在| 亚洲图片视频小说| 男人的天堂三级| 亚洲男人天堂视频| 久9综合在线| 密臀国产在线| 欧美韩日精品99综合| 亚洲色综网| 人澡逼| 国产又大又粗又长视频| 男同专区一区二区三区在线| 97这里有精品| 91肉片| 美女裸体无遮挡永久免费观看网站| 老熟女91视频| 久久国产逼| 日日操免费视频| 色欲三区| 中文字幕一区日韩精| 99re久久| 狼人综合婷婷激情四射 | 91老司机精品| 欧美色女人| 在线a亚洲视频播放在线| 欧州一区二区三区四区| 男女性感激情网站| 91操碰| 伊人久久国产免费观看视频| 久操影视| 亚洲色人阁| 久99| 天天摸夜夜摸| 欧美性视频二区三区| 超碰色美女| 久久春色| 全球成人中文在线| 国产精品肉丝自拍| 性欧美精| 久久久久久97| 欧美亚洲尤物久久| 日产狠狠干| 日韩在线97| 精品成人久久久人人亚洲| 99999精品| 成年人黄色小视频网站| 激情丁香五月| 伊人网在线视频| 久久久一区二区| 9997se| 永久免费观看的毛片的网站| 欧美激情中文字幕另类小说| 精品妇女一区二区三区| 天天摸天天舔天天操| 国产剧情在线| 99久久精品国产高潮| 久操高青| 欧美综合中文| 无码抄逼网| 亚洲第一页欧美| 久久精品老司| 亚洲日韩狠狠撸视频| 97色伦97色伦国产欧美| 久久黄黄| 蜜乳av一区二区三区四区不卡| 色五月AV| 久热这里| 后入合集| 日本理论在线| 欧美综合网1| 中文字幕国产在线天堂| 99热99在线| 天天躁狠狠躁av| 国产欧美日本亚洲精品| 91九九九馒头| 亚洲一区二区在线观看91| 探花精品视频| 亚洲双插| 人人扣人人操| 亚州欧美在线| 性饥渴少妇av无码毛片| 伊人久久国产免费观看视频| 欧美天天综合| 精品 码产区一区二-1080P高清在线www-B029AV| 欧美青青视频| 国产成人一级av88| 国产女人9999| 亚洲天堂人妻熟妇视频| 亚洲情色在线| 大香蕉一区二区在线观看.| 天天操天天射青青草| 男人综合网| 欧美男人一区| 狠狠91| 亚洲另类久操网| www色色com| 久久九九精品一区二区 | 亚熟在线| 国产日韩在线播放av| 一区二区三区日韩欧美| 成全动漫视频观看免费下载| 久久久久密| 青青操网| 国产久久一区二区| 99re久久| 超碰97人妻| 97亚洲资源| 欧美性生活免费网| 色哟哟av| 亚州操操穴网| 亚洲一级性爱视频免费看| 好舒服视频| 欧美强奸一区二区诱惑| 99热销国产这里有精品| 青青草久久一区网| 日韩国产在线观看av| 五月天AV资源| 欧美最婬乱婬爆婬性视频 | 欧洲Au麻豆| 亚洲一区二区三区中文字幕| 男人天堂无码| 后入 亚洲 美女 射| 国产精品一区二区手机看片| 天天日熟妇| 嗯嗯啊中文字幕| 天天综合色图| 黄页大片在线观看| 成人性爱全视频观看| 97这里有精品| 97碰碰日本乱偷人妻中文的| 97香蕉碰碰人妻国产欧美| 亚洲精品九九九| 久久久男人的天堂| 91黑丝在线播放| 大香焦A片| 人妻精品一区二区三区| 天天看片麻豆| 天天干天天爽| 人人摸人人摸人人干| 久久中出| 91激情国产| 欧美在线伊人色| 亚洲无码一区二区三区三州| 欧美A片中文字幕| 亚州欧美在线| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 亚洲欧美在线观看免费| 秋霞午夜成人福利片片| 色欧美色交综合| 91在线限制级| 男人天堂久久精品| 黄片无码在线制服| 日本成人A片免费看| 久久久精品网| 婷婷九月国产| 婬女免费一二三区A片| 蜜桃视频成a人v在线| 人人潮人人摸| 人妻丝袜无 码视频专区| 国产精品欧美激在线| 大色网久久| 91色综合激情| 天堂亚洲精品久久老牛| 成人精品电影| 丁香六月婷婷综合| 欧美丰满熟妇XXXX性ppX人交| 九九视频黄色片| 欧美不在线| 91N综合网| 伊人久久亚洲色欲综合网站 | 97天天摸天天爽| 久久久久深夜无码| 少妇特黄一区二区三区| 噜噜噜亚洲精品| 欧亚久久偷拍视频| 人人综合| 久久久久久久久久久久黄色 | 欧美综合在线第一页| 精品大久久| 999日韩中文精品观看视频。| 91色婷婷综合久久中文字幕二区| 日韩性爱再线视频| 国产精品成人无码av| 成人三级片无码| 大色综合网| AAAAAAAAA黄片| 我要色综合网| www.91视频网| 97精品免费| 91成人18| 亚洲97超碰| 91网站18禁| 欧美色999| 国产精品白领在线观看| 正在播放国产精品一区| 欧美大香蕉专区网| 中文激情网| 日韩精品一二三四| 男女91| 91在线丝袜视频| 亚洲天堂日本| 欧美在线大香999| 青青在线视频免费| 精品无码一区二区三区色欲| 中文字幕精品一区二| 欧美一级黄片视频在线| 国产成人久久久精品免费AV| 国产欧美日韩在线观看麻豆传媒公司| 乱日视频| 香蕉色网| 91亚洲在线| 人人做,人人操,人人摸| 一区二区三区 日韩欧美| 日韩中文字幕二区| 手机不卡视频不卡在线一二三区| 久草综合视频| 少妇的嫩逼图片| 午夜国产成人精品视频| 日本在线激情一区二区三区| 欧美制服另类丝袜| 少妇色综合| 欧美日韩久久精品爱爱| 天天干天天燥| 欧美色图天堂在线| 国产 大胆 对白| 粉嫩AV一区二区夜夜| 欧美午夜视频免费观看| 99爱在线视频| 97视频www| 啊啊啊啊操死我| 中文字幕一区电影在线观看| 人妻激情视频| 成人性爱免费播放| 噜噜噜狠狠色综合| 性交一区二区在线播放| 国产又黄又爽| 五月丁香婷婷综合| 人妻无码一区二区三区久久99| 亚洲精品97| 亚洲欧洲网站免费观看| 久草毛片电影怡| 99re免费| 色综合色色| 欧美在线色| 日韩字幕一区| 天美传媒av 在线| 99热国产精品| 久久久久亚洲AV无码专区少妇| 玖色AV| 久伊人网78| 中国一区二区亚洲人妻| 久久香蕉超碰97国产精品| 欧美少妇色图| 亚州伊人色综台| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 欧美人妻精品一区二区| 一牛一区二区三区久久| 亚洲AV麻豆Aⅴ无码电影一| 大香交伊人网| 国产精品成人午夜福利| 97人人草| 怡春院久久| 蜜桃无码AV一区二区| 亚洲天堂另类小说男人| 欧美亚洲特P| 五月天色色网站| 成人草草视频| 色狠狠色| 人妻一区二区三区熟女| 激情文学网伊人| 99热在线播放| 国产精品情侣啪啪| 一级性爱视频免费观看 | 久热69九色熟妇97| 亚洲本色精品一区二区久久| 手机av天堂久久久久| 少妇久久久久久| 青青操97| 欧美日韩另类在线播放| 天天插天天操天天摸天天射天天看| 91九色蝌蚪在线观看| 久热久| 综合影视国产无码| 欧美人妻一区二区| 丁香六月婷婷久久综合| 欧美天天综合网| 中文字幕乱碼在线| 亚洲欧美自拍偷拍| #NAME?| 91熟女熟妇视频网站| 欧美组图日韩亚洲中文字幕| 久久仑合| 蜜桃av综合网发布| 搡老女人老91二区| 青青草色情网站视频| 日韩不卡在线一区二区| 欧美综合天堂| 国产a级精品| 日本丝袜人妻内射| 天堂性色| 又摸又舔在线观看网站| 欧美劲爆视频一区二区| 一起草视频在线| 久久大线蕉一区| 在线视频日韩欧美国产| 伊人国产成人av网站| 久草草一二三四区久久| 婷婷五月天福利| 亚洲天堂在线怕怕视频 | 爱做久久久久久| dy888午夜老子影视达达兔| 欧美91精彩| 色五月婷婷五月天| av网站在线观看了| 欧美天天搞| 东京热av男人的天堂| 亚洲福利中文字幕在线| 精品人妻一区二区三区四区石在线| 超碰欧美在线欧美| 精品国产乱码久久久久久影片| 被男人添B超爽视频| 美女t无毒不卡不卡| 东北女人的毛片| 99精品在线| 精品国产丝袜一区二区三区乱码| 香蕉99秘 一区精品蜜桃臀| 欧美性生活内射| 东京太热久久久| 国产吞精a级片激情电影| 91视频伊人| 人妻一区二区三区熟女| 欧美在线|亚洲| 爽爽爽免费视频| 丁香五月婷婷基地| 97免费视频网| 日韩高潮一区| 凹凸视频特色日本特黄| 亚洲精品一二区| 翔田千里爆乳巨臀无码| 9丨久久九九九| 一区二区亚州激情久婷婷欧美| 国产视频一区二区在线观看| 色婷婷狠狠| 日韩丝袜二区| 黄页视频网站野外| 尤物网址| 亚洲国产精品99久久久| 囯产精品久久久久久久久久梁医生 | 欧美美女啪啪视频| 日本 欧美 亚中文字幕| www激情| 久久久成人国产精品无码| 自拍偷拍亚洲熟女妇人精品| 色牛aV| 日本 情色 1区| 97国产天堂岛| 97色色国产视频| 青青草伊人久久| 蜜臀精品1区2区| 欧美制服网站美腿丝袜| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 国产无马视频| 无码逼| 中文字幕一区电影在线观看| 天天操人人操狠狠插| 以及麻豆国产入口在线观看免费| 久久久九九九| 国产无码精品成人| 日韩无码视频黄色| 亚洲色系另类精品国产| 中文字幕精品一区欧美| 1人人看人人摸人人操| 9丨亚洲一区二区在线| 伊人黄色片| 性在久久久久久| 91成人久久 | 天天天天天干夜夜夜夜夜操| www.超碰在线| 口爆综合网| 日本九九久久99播| 97色欧州| 91网站在线播放| 后入人妻无码| 丰满人妻区一区二区三| jizz啪啪| 综合久久六月久久婷婷| 日本午夜福利影院| 加勒比无码一区二区三区| 九九九九88| 99蜜桃臀久久久欧美精品网站| 夜夜青青无码影院| 午夜啊啊| 性久久久| 亚洲天堂 视频你懂的| 国语人妻精彩刺激| 在线黄色污污网站| 熟女熟妇一区二区三区视频| 97色碰| 亚洲免费在线探花| 长长久久88视频| 嗯嗯啊啊好疼| 亚州性色| 亚洲欧洲综合成人av一区| 极品极品色影院| 亚洲AV乱码专区国产噜噜亚洲 | 日韩一级二级三级在线不卡观看完整| 日韩免费三级黄片电影| 国产超碰| 综合网亚| 97国产|免费| 高清无码在线播放网站| 另类天堂| 操曰本熟女| 亚洲综合第一页| 中文字幕版| 国产尤物在线三区| 尤物视频一区| 国产熟女少妇一区| 久久精品成人一区二区三区蜜臀| 精品福利| 韩国一级婬片A片AAAAA| 75大香蕉| 97欧美| 国产精品午夜高潮呻吟久久av| 在线观看十八禁| 青青草原成人| 草草影院日本第一页| 男人的天堂2018东京热啪啪啪| 一区二区亚州激情久婷婷欧美| 欧美激情一区| 超碰碰碰碰| 久久久熟女一区| 日韩无码三级影院| 欧美日韩人人精品| 色九久| 婷婷亚洲综合| 色一区二区三区综合| 午夜.DJ高清在线观看免费7| 天天看少妇| 日韩啪啪视频| 丁香五月天堂网| nuu12国产麻豆精品| 999亚洲国产视频| 欧美日韩大陆黑人少妇99| 欧美天天性| 蜜臀久久99精品久久久久久久久| 综合网亚洲在线| 亚洲精品精品一区二区| 色五月激情AV在线| 芊芊操逼视频无码| av天天在线| 澳门黄片一香蕉视频| 99久久无色码| 欧美影院一区二区三区| 精品久久99| 成人三级片一区二区三区视频| 强奸乱伦αv片| 呻吟 欧美 日本 中出| 岛国AB视频| 熟女91网| 美女黄频a美女大全免费皮| 九七毛片九九毛片 | 伊人一区二区三区| 国内毛片热久久思思热| 久久av色| 免费1级a做爰片观看| 美女主播色欲91抠b在线播放| CCYY草草影院地址入口| 91熟女综合| 国产精品免费日韩| 欧美第一页| 亚洲日韩精品在线播放| 97这里有精品| 欧美男女午夜啪啪| 久久精品人人做人人看| 素颜老阿姨乱情色| 日韩性爱小视频在线观看| 久久久999国产| 久久黄黄| 18禁无码永久免费无限制| 亚洲人91| 国产 日韩 另类 视频一区爱| 成人开心网在线视频| www99热| 久久产精品一区二区三区电影| 亚洲高清视频在线观看| 思思热影视| 亚洲高清欧美总合| 亚洲美女精品| 日本熟女中文字幕一区| aV中文麻| 成人影 天天操 亚洲| 尤物黄色在线观看网站| 骚日日av| 大香蕉 222| 国产成人精品日本视频| 1240青青草一区二区三区视频天爱| 国产视频一区二区三区久久亚洲天堂| 熟女五十路一区二区三| 九九九不卡| 欧美成人精品一区二区三区| 日韩欧美中文| 国产精品操| 91艹| 一区二区三区网站日日骚| 国产理论视频在线播放| 久久97精品久久久久久久不卡| 1区2区3区中文字幕日韩| 日韩性爱网址| 欧美十八禁视频| 91丝袜人妻| 青青操在线亚洲视频观看欧美在线 | 97干com| 人妻-91porn| 四虎午夜影院| 丰满人妻-区二区三区免费看| 91av天美性媒精品视频| 天天干天天插| 九九久久一区二区伦理| 国产玖玖| 欧美日韩 强奸乱伦| 午夜舔阴达高潮视频免费看| 精品丰满熟妇人妻一区| 狠狠图片青青草| 欧美色图天堂在线| 国产亚洲禁久一区二区| 日韩免费高清大片在线| 麻豆视频一区二区| 久久久国产护士丝袜美腿一| 懂色AV中文| 亚洲综合网电影91| 日韩午夜啪啪视频| 国产h片在线观看视频| 婷婷色色五月天福利| 78精品| 久久女女| 岛国不卡超碰护士AV在线播放| 国产av青草| 欧美视频在线第3页| 日本岛国黄色网址| 亚欧无码在线| 在线色导航| 亚洲中文字幕熟女| 91综合网站| 加勒比中文av| 神马麻豆福利院| 撸无码不卡免费视频| 天天天堂影视日韩亚洲91| 素颜老阿姨乱情色| 国产精品网站免费| 国产成人AV麻豆| 嗯嗯嗯,草死我| 丰满人妻一区二区三区在线| 久久久久免费少妇| 五月丁香色色网| 日欧操屄视频| 色五月首页| 在线啊v一区| 日本在线视频导航| 亚洲最大无码中文字幕网站| 天天干夜夜一操| 手机在线视频国内精品| 精品一区二区成人| 欧美日本国产日韩激情视频| 黑人狂躁日本妞一区二区三区| 秋霞一级A片黄色视频| 日韩人妻一区二区| 999久久久免费精品国产牛牛| 亚洲91网| 色呦呦国产精品免费看| 99久久亚洲精品无码毛片潘甜甜| 性色AV蜜色av色欲av| 久久久久久久强迫| 摸奶性爱视频网站在线免费播放| 八戒午夜福利理论片| 亚洲国产一区二区入口| 自拍偷拍 日韩无码| 日本一区二区不卡精品| 激情专区综合| 色噜噜综合在线| 色狠狠综合噜一二三区| 久久一二三四不卡 | 91色噜噜狠狠| 色超碰综合| 999九九九九国产动| 欧美色91| 五月丁香黄色网| 国产精品视频麻豆入口| 天天干人妇| 亚洲黑丝在线| 最新精品久久蜜桃 | 日韩精品-原创伙伴| 黄片免费日韩| 久久精品中文字幕无码l| AV九九| 妇女视频网站| 欧美另类天堂| 日产操逼| 欧美久久伊人| 久久久99久9| 热的中文 热的有码 热的国产| 78精品在线| av爱爱爱| 综合婷婷| 欧美色图下一页| 99久在线精品99re8蜜桃| 国产精品久久久久久久无码AV| 久久精品中文字幕无码l| 九九热免费视频| 日韩精品操少妇| 四虎精品永久在线观看| 亚洲97成人在线观看| 国产日韩欧美三级片| 亚州色站 日韩电影| 黑白配性爱AV成| 精品久久久久久AV无码| www色色com| 综合欧美日韩在线| 狠狠操狠狠操操| 黄色av一区二区在线| 色情亚洲日本成人| 亚洲风情在线观看| 国产剧情AV不卡在线观看| 北条麻妃99精品青青久久| 成人精品水蜜桃久久久久久久| 日韩无码人妻| 91超级碰碰碰| 欧美色日| 手机看片日韩人妻| 草草影院在线视频| 人人操人人精品影片| 黑人美精品 A片| 丰满欧美少妇| 麻豆天天躁天天揉揉AV| 美女尤物人人操| 人人摸人人干| 亚洲啪啪综合?v一区综合精品区| 在线观看日韩av不卡| 欧色性第一页| 日本韩国国产精品一区| 超91综合网| 综合五月天| 伊人久久大香大香线蕉中文| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 精品久久人妻成人网| 欧美亚州色的图| 精品丝袜无码一区二区三APP| 无码免费一区二区三区啪啪| 日韩欧美久久婷婷网站| 日韩一级成人毛片免费观看| 久久 亚洲 日韩 人妻| 国产主播福利| 一区=区三区视频| 综合网天天| 大香蕉97久久| 美女诱惑久久| 日日狠狠久久偷偷色综合免费| 国产美女高潮视频| 久久性视频| 好湿好紧视频| 婷婷伊人| 2017天天操| 天天欧美97| 丁香五月激情啪啪| 热99re69精品8在线播放| 久久99热这里只频精品6学生| 亚洲欧美碰碰| 日韩人体偷拍| 襙一襙| 91美女视频在线| 国产精品久久久久无码A√| 九九久久99| av天堂精品久久| 久久9999| 大香蕉九九| 欧州91高潮| 欧美少妇第一页| 人妻丰满熟妇一区二区三| 国产日韩欧美| 欧美性爱在线无码| 欧美碰碰综合色| 欧美AB在线观看| 无遮挡一级毛片视频免费的| 欧美夜夜骑视频| 日本高清一区二区在线| 亚洲男人天堂网站| 91天天日| av绯色| 国际精品久久久| 日韩偷拍色图| 免费观看性欧美一级| 综合激情一一91| 国产 码在线成人网站| 成人线上超碰| 97在线观看免费视频l| 五月综合婷婷久久网站| 亚洲a色| 97色欧州| 亚洲中文一区二区三区视频| 五十路一区无码| 人妻少妇三级| 大香蕉乱伦视频网| 日韩特级毛片免费观看全集| 欧美亚洲厕所精品偷拍91| 天天爽人人综合免费7799| 欧美性爽xyxOOOO| 欧美激情黑人| 偷拍欧美激情| 国产高清MV操逼视频| 亚洲男人天堂2017| 久久一二三四五六七八九区区| aⅴ日韩成人电影av在线免费看av大全 | 色综合天天爱去电影网| 欧美熟妇操操视频| 欧美精品99久久久| 亚欧性爱无码| 久操97| 一摸二插三插| 欧美在线伊人色| 在线不卡视频| 色狠狠 - 百度| 久久久久久精| 亚洲成人AB| 啊啊啊好舒服视频在线观看| 天天欧美色| 日韩性爱高清免费视频| 国产精品久久久久久高清无码免费看 | 久9爱精品| 亚洲情色图片区| 97超碰碰碰| 日韩精品一区二区三区色欲| 中文字幕日韩人妻视频| 夜色91| 高清无码91| 日日夜夜模| 欧亚不卡| 少妇99成人麻豆| 久久婷婷伊人| 欧亚性爱视频免费看| 天天激情综合站| 秋霞怕怕片| 国产一二三在线视频五十路| 国产女主播视频在线观看| 日韩钢筋无码高清啾啾啾| 综合色图,成人综合网| 综合啪啪| 亚洲欧美日韩夜夜| 在线无码操| 亚洲啪啪视频一区二区| 一级毛片久久久久久久女人18| 久久久久亚洲Av无码专区老牛影视 | 97人人夜夜精品视频| 国产白丝精品在线观看| 欧美日韩亚洲天堂| 少妇高潮一区二区三区在线| yazhouzaixian| 丰满人妻一区| 激情五月天校园春色网| 激情视频一二三| 麻豆一区二区三区精品| 欧美亚洲一区二区久久久婷精品大包诱| 欧美天天插| 美女尤物福利视频| 中文字幕第页| 天综合网| 天天干一区二区| 蜜桃久久久久久久| 日欧美色| 丰满搜索结果 -第18页- 久久高清无码| 久久久久9久久久久| 四虎AV无码| 熟啊v色欧美热| 99xav| 亚洲性猛| 免看60秒涩涩视频| 深夜激情| 国产传媒一区二区三区| 亚洲欧美天堂| 麻豆视频国产一区二区| 人人操人人摸人人看人人插| 在线观看成人性爱免费小视频| 日本欧美一区二区三区免费| 无码日韩人妻av一| 亚洲福利中文字幕在线|