SlideShare ist ein Scribd-Unternehmen logo
1 von 47
Downloaden Sie, um offline zu lesen
Learn Python in 30 min - 2
cmj
1
2
真實的世界
• 你需要會:
• 複雜的操作邏輯
• 很有機會讀/寫檔案
• 還可能執行外部指令
• 或許還來個操作系統
3
真實的世界
• 你需要會:
• 複雜的操作邏輯
• 很有機會讀/寫檔案
• 還可能執行外部指令
• 或許還來個操作系統 下次會提到!
4
來點會用到的狀況∼
5
1. 跑你要的程式 (e.g. 測試某個功能)
1. 控制系統,執行某個邏輯
2. 回傳結果
2. 記錄結果
1. 決定測試記錄的格式,開檔案
2. 記錄結果,關檔案
6
• 來點真實的 case :確定版號
• 思考一下:取得系統/程式版本
• 思考一下:記錄當下的版本
7
• 來點真實的 case :確定版號
• 思考一下:取得系統/程式版本
• 執行外部指令:uname -a
• 思考一下:記錄當下的版本
8
• 來點真實的 case :確定版號
• 思考一下:取得系統/程式版本
• 執行外部指令:uname -a
• 思考一下:記錄當下的版本
• 處理字串,萃取版本資訊
9
執行外部指令:需要外部函式庫
10
11
• import os
• 引用外部函式庫
• os 函式庫提供的所有功能,現在可以用了∼
• 理論上,可以用 popen 執行所有外部指令
12
• 根據不同的平台,當然會得到不同的結果
• uname 是平台相關 (POSIX-Like command)
• -a 表示顯示所有資訊
• 你需要處理這個字串
13
14
• 字串處理常用的
• split - 分割
• find - 找第一個子字串的起始位子
• count - 尋找子字串出現的次數
• join - 將多個字串合成一個
15
這些都比不上...
16
• 字串/串列的基本操作
• LIST[idx] - 第 idx 個元素
• LIST[-idx] - 反向第 idx 個元素
• LIST[Start:End] - 從 Start 到 End-1 的子XX
• LIST[S:E:Step] - 從 S 到 E-1 每 Step 的子XX
17
18
Q:誰會看著程式,一邊跑一邊記錄哪個步驟錯誤
19
記在檔案不是很棒嗎
20
• 如果可以把所有測試結果記錄下來
• 完整的測試結果
• 只有沒有成功的測試
• 測試失敗的詳細步驟
• 這樣不是很棒嗎∼
21
• 如果可以把所有測試結果記錄下來
• 完整的測試結果
• 只有沒有成功的測試
• 測試失敗的詳細步驟
• 這樣不是很棒嗎∼
• 還可以跟隔壁的 泡茶聊天 討論公事
22
23
• 簡單一點:要不讀檔、要不寫檔
• 看你 open 帶的參數:預設是讀檔
• 根據你開檔的方式:要不 read、要不 write
• 死都要記得關檔
24
• 簡單一點:要不讀檔、要不寫檔
• 看你 open 帶的參數:預設是讀檔
• 根據你開檔的方式:要不 read、要不 write
• 死都要記得關檔:我會忘記怎麼辦!
25
26
• 關鍵字 with
• 把開檔的 fd 放在 as 之後
• 跟 function 一樣有 scope
• 在 scope 結束後幫你自動關檔
27
所以合併兩個 case
28
29
回到類別
30
• 如果把一切變成類別/函式庫
• 你只需要拼命的加額外的邏輯
• 不需要管
• 流程紀錄
• 執行參數
31
套用到一開始的例子∼
32
• 設計一個框架
• 執行不同的測試邏輯,紀錄測試結果
• 根據測試邏輯,執行不同的參數
• 需要增加測試 == 增加一個新的 method
33
框架
34
35
決定測試項⽬目
36
執⾏行:紀錄
測試邏輯
37
38
單項測試
39
多項測試
40
控制測試項⽬目
41
抽象的測試邏輯
看 log 的時間
42
不免俗的,回家作業
43
回家作業
• 熟讀 string 可以用的技巧可以幫你處理字串
• 替換所有特定字元
• 我不要第3~5行
• 每一行開頭都幫我加上 #
• … etc
44
處理 ps 指令
• 寫一個完整的程式,可以用 Python 執行
• 最後的結果輸出成檔案:result
• 有多少 非 root 身份 的 process
• 最大 PID 的 process 名稱
• 如果 result 已經存在
• 把舊的 result 變成 result.old
• 原本的 result.old 就 忘了 刪了它吧
45
進階:互動程式
• 簡單的計算機程式
• 接受外面 User 輸入得值,送進 python eval 裡
• e.g. User 輸入 1+2 你就執行 eval(“1+2”)
• 如果 User 亂打,你需要處理例外狀況
• 1/0 => 告訴他:你數學沒學好
• a+b => 告訴他:這不是數學運算
46
Thanks for your attention~
47

Weitere ähnliche Inhalte

Ähnlich wie Learn python 2 - Real World Case

Binary exploitation - AIS3
Binary exploitation - AIS3Binary exploitation - AIS3
Binary exploitation - AIS3Angel Boy
 
Linux必备知识与Unix基础文化
Linux必备知识与Unix基础文化Linux必备知识与Unix基础文化
Linux必备知识与Unix基础文化Dahui Feng
 
從 REPL 到 IDE
從 REPL 到 IDE從 REPL 到 IDE
從 REPL 到 IDEJustin Lin
 
Interact 操作消費者教學範例
Interact 操作消費者教學範例Interact 操作消費者教學範例
Interact 操作消費者教學範例turtleknight
 
[students AI workshop] Pytorch
[students AI workshop]  Pytorch[students AI workshop]  Pytorch
[students AI workshop] PytorchTzu-Wei Huang
 
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具Will Huang
 
Git raiders of junior
Git raiders of juniorGit raiders of junior
Git raiders of juniorKevin Chen
 
与Python一路走来
与Python一路走来与Python一路走来
与Python一路走来leejd
 
CH10:輸入輸出
CH10:輸入輸出CH10:輸入輸出
CH10:輸入輸出Justin Lin
 
該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?Andy Dai
 
做自己的可可豆夾 @ cocoahead.tw
做自己的可可豆夾 @ cocoahead.tw做自己的可可豆夾 @ cocoahead.tw
做自己的可可豆夾 @ cocoahead.twKai-Yuan Cheng
 
嵌入式平台移植技巧概說
嵌入式平台移植技巧概說嵌入式平台移植技巧概說
嵌入式平台移植技巧概說Joseph Lu
 
Learn python in 30 min - 3
Learn python in 30 min - 3Learn python in 30 min - 3
Learn python in 30 min - 3Chia-Hao Tsai
 
軟體組裝心得分享
軟體組裝心得分享軟體組裝心得分享
軟體組裝心得分享Wen Liao
 
Maximize Your Production Effort (Chinese)
Maximize Your Production Effort (Chinese)Maximize Your Production Effort (Chinese)
Maximize Your Production Effort (Chinese)slantsixgames
 
1. Python起步走
1. Python起步走1. Python起步走
1. Python起步走Justin Lin
 
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJava SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJustin Lin
 

Ähnlich wie Learn python 2 - Real World Case (20)

Linux File system
Linux File systemLinux File system
Linux File system
 
Binary exploitation - AIS3
Binary exploitation - AIS3Binary exploitation - AIS3
Binary exploitation - AIS3
 
Win dbg入门
Win dbg入门Win dbg入门
Win dbg入门
 
Windbg入门
Windbg入门Windbg入门
Windbg入门
 
Linux必备知识与Unix基础文化
Linux必备知识与Unix基础文化Linux必备知识与Unix基础文化
Linux必备知识与Unix基础文化
 
從 REPL 到 IDE
從 REPL 到 IDE從 REPL 到 IDE
從 REPL 到 IDE
 
Interact 操作消費者教學範例
Interact 操作消費者教學範例Interact 操作消費者教學範例
Interact 操作消費者教學範例
 
[students AI workshop] Pytorch
[students AI workshop]  Pytorch[students AI workshop]  Pytorch
[students AI workshop] Pytorch
 
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
 
Git raiders of junior
Git raiders of juniorGit raiders of junior
Git raiders of junior
 
与Python一路走来
与Python一路走来与Python一路走来
与Python一路走来
 
CH10:輸入輸出
CH10:輸入輸出CH10:輸入輸出
CH10:輸入輸出
 
該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?
 
做自己的可可豆夾 @ cocoahead.tw
做自己的可可豆夾 @ cocoahead.tw做自己的可可豆夾 @ cocoahead.tw
做自己的可可豆夾 @ cocoahead.tw
 
嵌入式平台移植技巧概說
嵌入式平台移植技巧概說嵌入式平台移植技巧概說
嵌入式平台移植技巧概說
 
Learn python in 30 min - 3
Learn python in 30 min - 3Learn python in 30 min - 3
Learn python in 30 min - 3
 
軟體組裝心得分享
軟體組裝心得分享軟體組裝心得分享
軟體組裝心得分享
 
Maximize Your Production Effort (Chinese)
Maximize Your Production Effort (Chinese)Maximize Your Production Effort (Chinese)
Maximize Your Production Effort (Chinese)
 
1. Python起步走
1. Python起步走1. Python起步走
1. Python起步走
 
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJava SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
 

Mehr von Chia-Hao Tsai

[2019.05] HST - RegEx 101 ~ 1001
[2019.05] HST - RegEx 101 ~ 1001[2019.05] HST - RegEx 101 ~ 1001
[2019.05] HST - RegEx 101 ~ 1001Chia-Hao Tsai
 
[2019.02.16] hst - orm
[2019.02.16] hst  - orm[2019.02.16] hst  - orm
[2019.02.16] hst - ormChia-Hao Tsai
 
[2019.01.12] hst iptables 101 to 301
[2019.01.12] hst   iptables 101 to 301[2019.01.12] hst   iptables 101 to 301
[2019.01.12] hst iptables 101 to 301Chia-Hao Tsai
 
[2018.12.15] hst python object 102
[2018.12.15] hst   python object 102[2018.12.15] hst   python object 102
[2018.12.15] hst python object 102Chia-Hao Tsai
 
[2018.11.16] Python Object 101
[2018.11.16]  Python Object 101[2018.11.16]  Python Object 101
[2018.11.16] Python Object 101Chia-Hao Tsai
 
[2017.03.18] hst binary training part 1
[2017.03.18] hst binary training   part 1[2017.03.18] hst binary training   part 1
[2017.03.18] hst binary training part 1Chia-Hao Tsai
 
Rootkit 101 - 2nd Edition
Rootkit 101 - 2nd EditionRootkit 101 - 2nd Edition
Rootkit 101 - 2nd EditionChia-Hao Tsai
 
Passwd crack introduction
Passwd crack   introductionPasswd crack   introduction
Passwd crack introductionChia-Hao Tsai
 
Security coding c and c++ ch8(2)
Security coding c and c++   ch8(2)Security coding c and c++   ch8(2)
Security coding c and c++ ch8(2)Chia-Hao Tsai
 
Security coding c and c++ ch8 (1)
Security coding c and c++   ch8 (1)Security coding c and c++   ch8 (1)
Security coding c and c++ ch8 (1)Chia-Hao Tsai
 

Mehr von Chia-Hao Tsai (14)

[2019.05] HST - RegEx 101 ~ 1001
[2019.05] HST - RegEx 101 ~ 1001[2019.05] HST - RegEx 101 ~ 1001
[2019.05] HST - RegEx 101 ~ 1001
 
[2019.02.16] hst - orm
[2019.02.16] hst  - orm[2019.02.16] hst  - orm
[2019.02.16] hst - orm
 
[2019.01.12] hst iptables 101 to 301
[2019.01.12] hst   iptables 101 to 301[2019.01.12] hst   iptables 101 to 301
[2019.01.12] hst iptables 101 to 301
 
[2018.12.15] hst python object 102
[2018.12.15] hst   python object 102[2018.12.15] hst   python object 102
[2018.12.15] hst python object 102
 
[2018.11.16] Python Object 101
[2018.11.16]  Python Object 101[2018.11.16]  Python Object 101
[2018.11.16] Python Object 101
 
[2017.03.18] hst binary training part 1
[2017.03.18] hst binary training   part 1[2017.03.18] hst binary training   part 1
[2017.03.18] hst binary training part 1
 
Rootkit 101 - 2nd Edition
Rootkit 101 - 2nd EditionRootkit 101 - 2nd Edition
Rootkit 101 - 2nd Edition
 
ELF 101
ELF 101ELF 101
ELF 101
 
HoneyCon 2014
HoneyCon 2014HoneyCon 2014
HoneyCon 2014
 
Passwd crack introduction
Passwd crack   introductionPasswd crack   introduction
Passwd crack introduction
 
Security coding c and c++ ch8(2)
Security coding c and c++   ch8(2)Security coding c and c++   ch8(2)
Security coding c and c++ ch8(2)
 
Security coding c and c++ ch8 (1)
Security coding c and c++   ch8 (1)Security coding c and c++   ch8 (1)
Security coding c and c++ ch8 (1)
 
Build web server
Build web serverBuild web server
Build web server
 
Rootkit tw(0224)
Rootkit tw(0224)Rootkit tw(0224)
Rootkit tw(0224)
 

Learn python 2 - Real World Case