全站文章索引 📚📚📚

展開全部 | 收合全部

全站文章索引 📚📚📚

展開全部 | 收合全部

【Python 系統相關 #2】python 利用 argparse 使程式執行時可帶參數 (updated: 2022/12/19)

前言

python 有個非常實用的套件「argparse」,
使我們的程式執行時可以攜帶參數,
許多大型的 python 系統中都能夠看到使用這個套件的蹤影,
內文中也提供我自己的程式模板,
可以直接套用再更改成自己想要的樣子。

詳細說明

下面的範例程式碼中,是將每一個變數寫得較為嚴謹的,
實際上不需要每個都寫到這麼細節,但為了程式可讀性 (也方便其他工程師閱讀),
個人覺得是寫愈完整愈好。

import argparse

基本的「import argparse」是必要的,這個我就不多提了XD

argparse.ArgumentParser()

parser = argparse.ArgumentParser(prog='argparse_template.py', description='Tutorial') 

這個是最一開始的宣告,內容可以不寫,
這些裡面的內容都是在當我們下「-h」、「–help」時才會出現的「提示內容」

也就是說,最少只需要寫 「parser = argparse.ArgumentParser()」,不能再少了

  • prog=’argparse_template.py’
    prog 指的是「程式的名稱」
  • description=’Tutorial’
    description 指的是「程式的功能敘述」

parser.add_argument()

parser.add_argument('--text', '-t', default='test123456', type=str, required=False,  help='Text for program')
parser.add_argument('--nums', '-n', default='10', type=int, required=False, help='Text for program')

這邊就是「重點中的重點了」,
所有的參數都是在這邊完成的! 這邊提供兩個範例。

  • ‘–text’, ‘-t’
    (必給)就是指帶的參數,像這邊我們定義了「–text」、「-t」都可以,(長的是清楚、短的是方便),
    這邊定義完之後,我們之後就可以透過這邊的內容在程式執行時下參數。

註:不一定要「兩個」,可以一個或兩個以上都沒問題,直接接在後面即可。
但一般建議「一長一短」就好 (目的:長的是清楚、短的是方便),太多看起來就太雜亂了。

  • default=’10’
    (可以不給)預設這個變數的值。
  • type=str
    (可以不給)預設這個變數的型態,通常是限制型態或讓可讀性更好,例如我們可以判斷 1 應該是 bool, str 還是 int。
  • required=False
    (可以不給)如果這個值是 True,在執行 python 的時候會強制要你給這個參數 (不管你有沒有設 default)。
  • help=’Text for program’)
    (可以不給)這個變數的說明,會在輸入錯誤時、或是輸入「-h」、「–help」時出現提示。

parser.parse_args()

將這些帶入的參數,導入至一個變數裡面。

習慣上我們都會直接寫

args = parser.parse_args()

呼叫變數

我們只要使用上面回傳的變數 args,
我們可以透過物件呼叫的方式將我們得到的變數呼叫出來。

例如: args.text、args.num (取決於:「你的 — 後面接的東西」)

寫完了,卻忘了自己設定怎麼使用嗎?

寫完了,卻忘了自己設定怎麼使用嗎?
argparse 也提供了我們方便的功能,
只要下 「-h」、「–help」就可以快速查詢所有的說明。

範例

範例程式碼 sample code

這邊我們將 argparse 做成一個 function,套用時

  • 只需要修改 get_args() 就能直接修改要帶入的參數
  • 修改 main() ,然後看你想要幹嘛XD

像這邊的 main() ,我們就將輸入的字串 args.text 重複印出 args.nums 次

import argparse

def get_args():
    parser = argparse.ArgumentParser(prog='argparse_template.py', description='Tutorial') 
    parser.add_argument('--text', '-t', default='test', type=str, required=False, help='Text for repeated')
    parser.add_argument('--nums', '-n', default='10', type=int, required=False, help='Repeated times')

    return parser.parse_args()


def main():
    for i in range(args.nums):
        print(i, args.text)


if __name__ == '__main__':
    args = get_args()
    main()

範例執行結果

可以看到我們下了 「-n 10 (表示重複10次)」,「 -t (表示輸入字串)」

另外,因為我們有設定 default,所以就算有參數沒有下也能直接讀取 default 的值。

進階使用 – 設定不帶參數的純 flag (store_true)

上面的例子當中,我們幾乎示範的都是「帶有參數的」,例如「–num 10」,
其實也有不帶參數的用法,作為一個「單純的 flag」。

範例程式碼

在此,flag 作為單純的 flag 使用,
而「action=”store_true”」,表示「有 flag 時為 True」。

import argparse

def get_args():
    parser = argparse.ArgumentParser(prog='test.py', description='Tutorial') 
    parser.add_argument("--flag", help="help", action="store_true")
    return parser.parse_args()

if __name__ == '__main__':
    args = get_args()
    if args.flag:
        print("got flag.")
    else:
        print("no flag.")

結果

Reference

⭐Python 基礎用法 相關文章整理⭐:
1.【Python】python list 清除, 移除內容元素 remove, pop, del, clear相關用法整理 sample code (內含範例程式碼)
2.【Python】寫模組 module、package 總整理 Importing files from different folder
3.【Python】python assert (斷言) 用法 sample code (內含範例程式碼)
4.【Python】python 一行 if else 語法 (one line if else) sample code (內含範例程式碼)
5.【Python】lambda 與 def function 使用方法與比較整理(內含範例程式碼)
6.【Python】python map 使用方法 與 其他寫法比較整理 (內含範例程式碼) sample code
7.【Python】python zip 使用方法 與 其他寫法比較整理 (內含範例程式碼) sample code
⭐Python 字串處理 相關文章整理⭐:
1.【Python】python print 變數的值 & 變數名稱 方法總整理
2.【Python】python string format str.format 總整理
⭐Python 檔案處理 相關文章整理⭐:
1.【Python】python 開關檔範例 與 程式模板 with open / file open sample code
2.【Python】取出檔案名稱 (含副檔名、不含副檔名) os path basename split 取出 檔名 路徑 不要副檔名 sample code
3.【Python】在 python 中利用 os.chmod 更改檔案的權限 chmod 777
4.【Python】利用 shutil 來複製檔案 shutil copy file
5.【Python】python 建立資料夾範例 mkdir os.makedirs() sample code
6.【Python】python 移除資料夾範例 rmdir shutil.rmtree() sample code
7.【Python】確認檔案是否存在 os.path.isfile / 確認資料夾是否存在 os.path.isdir sample code is folder / file exist
⭐Python 系統偵測 相關文章整理⭐:
1.【Python】python pyinotify sample code 偵測指定路徑底下的文件變化 (內有範例程式碼)
2.【Python】python 利用 argparse 使程式執行時可帶參數 (內附範例程式碼) sample code
⭐Python 平行運算 相關文章整理⭐:
1.【Python】threading – 建立多執行緒來執行程式 (內含範例程式碼) sample code
2.【Python】multiprocessing – 01 | 用多核心來執行程式 (內含範例程式碼) sample code
3.【Python】multiprocessing – 02 | pool, map, apply_async – 用多核心來執行程式並取得結果 (內含範例程式碼) sample code
4.【Python】python thread multiprocess 比較總整理
5.【Python】python pooling multiprocess – 用多核心來執行程式 sample code (內含範例程式碼)
⭐Python 測試程式 相關文章整理⭐:
1.【Python】python 測試程式 – 利用 doctest 測試 python testcase 的優雅寫法,適用於 leetcode (doctest in function,搭配 function 的用法)
2.【Leetcode】python – 利用 doctest 測試 leetcode python testcase 的優雅寫法 (doctest in class,搭配 class 的用法)
⭐Python Chatbot 相關文章整理⭐:
1.【Chatbot】(全圖文說明) LINE Developers bot 機器人註冊與設定
2.【Chatbot】(全圖文說明) ngrok 本地伺服器設定方法 – LINE bot local server
3.【Chatbot】Dialogflow API 串接 python 的方法 (內含範例程式碼)
4.【Chatbot】[講義分享] 手把手實作line機器人 (linebot API 運用)
⭐Python Google Colab (Colaboratory) 相關文章整理⭐:
1.【Colab】Python colab 上傳檔案的方法 (內含範例程式碼) upload files
2.【Colab】Python colab 連接 google 雲端硬碟取用資料 (內含範例程式碼) mount google drive
⭐Python 其他筆記 相關文章整理⭐:
1.【Python】anaconda 更新 (upgrade) python 3.8 版本筆記
2.【Sublime】Sublime 將縮排 “tab” 改成 4格空白 的方法 (圖文說明) sublime indent 4 spaces
3.【Sublime】Python 縮排小技巧 (很爛但實用) 快速將 tab 改成「4格空白」的方法
⭐【喜歡我的文章嗎? 歡迎幫我按讚~ 讓基金會請創作者喝一杯咖啡!
如果喜歡我的文章,請幫我在下方【按五下Like】 (Google, Facebook 免註冊),會由 「LikeCoin」 贊助作者鼓勵繼續創作,讀者們「只需幫忙按讚,完全不用出錢」哦!

likecoin-steps
Howard Weng
Howard Weng

我是 Howard Weng,很多人叫我嗡嗡。這個網站放了我的各種筆記。希望這些筆記也能順便幫助到有需要的人們!如果文章有幫助到你的話,歡迎幫我點讚哦!
另外,因為定位是「個人的隨手筆記」,有些文章內容「⚠️可能我理解有誤⚠️」或「🥱只寫到一半😴」,如果有發現這樣的情況,歡迎在該文章的最下面留言提醒我!我會儘快修正或補上!感謝大家的建議與幫忙,讓網站能變得更好🙏

文章: 817

★留個言吧!內容有誤或想要補充也歡迎與我討論!