最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中解析命令行參數(shù)的示例詳解

 更新時間:2024年11月08日 08:48:19   作者:仙草哥哥  
這篇文章主要為大家詳細介紹了python中命令行參數(shù)的解析,并做一個命令行程序,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下

命令行參數(shù)

加密程序

考慮這樣一個加密程序,其中一個功能,是對一段字符串進行base64加密,另一個功能,是對一段base64字符串解密:

import base64
 
def encrypt_to_base64(input_string):
    byte_data = input_string.encode("utf-8")
    base64_encoded = base64.b64encode(byte_data)
    return base64_encoded.decode("utf-8")
 
def decrypt_from_base64(base64_string):
    byte_data = base64_string.encode("utf-8")
    decoded_data = base64.b64decode(byte_data)
    return decoded_data.decode("utf-8")
 
encrypt_to_base64("sagegrass")
decrypt_from_base64("c2FnZWdyYXNz")

對于這樣一個功能,如果我希望通過命令行調(diào)用,然后快速得到結(jié)果,可能是像這樣的:

# 設(shè)置-e選項,進行加密
python base64_encrypt.py -e "sagegrass"
 
# 設(shè)置-d選項,進行解密
python base64_encrypt.py -d "c2FnZWdyYXNz"

那么,該怎么做到呢?

sys.argv

命令行參數(shù)以列表的形式,保存于sys模塊的argv屬性中,具體來說

import sys
 
print(sys.argv)
 
# 對于python base64_encrypt.py -e "123456",結(jié)果為:['base64_encrypt.py', '-e', 'sagegrass']
# 對于python base64_encrypt.py -d "MTIzNDU2",結(jié)果為:['base64_encrypt.py', '-d', 'c2FnZWdyYXNz']

處理命令行參數(shù)

因此,根據(jù)sys.argv的返回結(jié)果,我們可以假設(shè),如果用戶的使用方法正確,那么,我們可以:

import base64
import sys
 
def encrypt_to_base64(input_string):
    byte_data = input_string.encode("utf-8")
    base64_encoded = base64.b64encode(byte_data)
    return base64_encoded.decode("utf-8")
 
def decrypt_from_base64(base64_string):
    byte_data = base64_string.encode("utf-8")
    decoded_data = base64.b64decode(byte_data)
    return decoded_data.decode("utf-8")
 
 
if len(sys.argv) >= 3:
    if sys.argv[1] == "-e":
        print(encrypt_to_base64(sys.argv[2]))
    elif sys.argv[1] == "-d":
        print(decrypt_from_base64(sys.argv[2]))

此時,我們程序已經(jīng)可以正確處理-e以及-d的參數(shù)了。

復(fù)雜命令行參數(shù)

計算器案例

考慮這樣一個計算器程序,允許接受兩個參數(shù),并且選擇一個操作,進行加,減,乘,除的操作。

但是,也可以允許只接受一個參數(shù),并且選擇進行平方,或者開根號的操作。

同時,也應(yīng)該允許用戶可以先提供數(shù)字,或者后提供數(shù)字。

# 實現(xiàn)一個加法操作
python calculator.py 520 0.1314 --operation add
python calculator.py -o add 520 0.1314 
 
# 實現(xiàn)一個平方操作
python calculator.py -o square 5

因為操作較為復(fù)雜,用戶可能搞不清楚,所以同樣應(yīng)該提供一份幫助說明。

python calculator.py -h

那么,在這種情況下,如果還是使用sys.argv,并且在整個列表中,去解析命令行參數(shù),會非常麻煩。因此,需要更好的工具,去處理這個問題。

argparse

argparse是一個更好的工具,可以處理更加復(fù)雜的命令行參數(shù)。

創(chuàng)建ArgumentParser對象

parser = argparse.ArgumentParser(description="base64加解密")

添加位置參數(shù)

parser.add_argument("text", type=str, help="用于加解密的一段文本")

添加操作符

parser.add_argument("-e", "--encrypt", action="store_true", help="對文本進行base64加密")
parser.add_argument("-d", "--decrypt", action="store_true", help="對文本進行base64解密")

解析參數(shù)

args = parser.parse_args()
if args.encrypt:
    print(encrypt_to_base64(args.text))
elif args.decrypt:
    print(decrypt_from_base64(args.text))
argparse處理base64加解密
import base64
import argparse
 
def encrypt_to_base64(input_string):
    byte_data = input_string.encode("utf-8")
    base64_encoded = base64.b64encode(byte_data)
    return base64_encoded.decode("utf-8")
 
def decrypt_from_base64(base64_string):
    byte_data = base64_string.encode("utf-8")
    decoded_data = base64.b64decode(byte_data)
    return decoded_data.decode("utf-8")
 
parser = argparse.ArgumentParser(description="base64加解密")
 
parser.add_argument("text", type=str, help="待加解密的文本")
 
parser.add_argument("-e", "--encrypt", action="store_true", help="對文本進行base64加密")
parser.add_argument("-d", "--decrypt", action="store_true", help="對文本進行base64解密")
 
args = parser.parse_args()
if args.encrypt:
    print(encrypt_to_base64(args.text))
elif args.decrypt:
    print(decrypt_from_base64(args.text))

argparse處理計算器

import argparse
import math
 
parser = argparse.ArgumentParser(description="一個命令行的計算器")
 
parser.add_argument("num1", type=float, help="第一個數(shù)字")
parser.add_argument("num2", type=float, nargs='?', default=None, help="第二個數(shù)字(平方和開根號操作無需提供)")
parser.add_argument("-o", "--operation", choices=["add", "sub", "mul", "div", "square", "sqrt"], default="add", help="選擇操作:add(加),sub(減),mul(乘),div(除),square(平方),sqrt(開根號)")
 
 
args = parser.parse_args()
 
if args.operation in ["add", "sub", "mul", "div"]:
    if args.num2 is None:
        parser.error(f"操作'{args.operation}'需要提供兩個數(shù)字。")
elif args.operation in ["square", "sqrt"]:
    if args.num2 is not None:
        parser.error(f"操作'{args.operation}'只需要提供一個數(shù)字。")
 
 
if args.operation == "add":
    result = args.num1 + args.num2
elif args.operation == "sub":
    result = args.num1 - args.num2
elif args.operation == "mul":
    result = args.num1 * args.num2
elif args.operation == "div":
    if args.num2 == 0:
        result = "除數(shù)不能為零!"
    else:
        result = args.num1 / args.num2
elif args.operation == "square":
    result = args.num1 ** 2
elif args.operation == "sqrt":
    if args.num1 < 0:
        result = "不能對負數(shù)開平方根!"
    else:
        result = math.sqrt(args.num1)
else:
    result = None
 
if result is not None:
    print(f"結(jié)果: {result}")

在這種情況下,使用-h查看幫助的時候,就會發(fā)現(xiàn),已經(jīng)自動生成了一份簡潔的幫助信息。

安裝為全局命令

全局命令

我們可能經(jīng)常觀察到這樣一種情況,在使用他人的第三方庫的時候,可以使用命令,例如,lunar-find 春節(jié) 2025

而對比我們的命令行程序,則必須要按照python xxx的形式使用,而且必須找到對應(yīng)的py文件,這并不方便,那么該可以讓我們也使用全局命令呢?

my-lunar-find

因為原本的lunar-find輸出格式不夠靈活,因此,我們對其進行簡單的重寫,以滿足可以輸出任意格式的時間。

關(guān)于原本的lunar-find工具,如果你并不了解,可以看看這篇文章,lunarcalendar的使用

import argparse
 
from lunarcalendar.festival import festivals
from lunarcalendar.solarterm import solarterms
from itertools import chain
from datetime import date
 
def main():
    parser = argparse.ArgumentParser(description="自行創(chuàng)建的lunar-find,修改了原本的日期格式")
 
    parser.add_argument("fs_or_st", type=str, help="需要查找的節(jié)日或節(jié)氣")
    parser.add_argument("year", type=int, help="年份")
    
    parser.add_argument("-f", "--format", default="%Y年%m月%d日", help="按照需要的格式重新格式化,%Y為年,%m為月,%d為日")
    
    args = parser.parse_args()
    
    for day in chain(festivals, solarterms):
        if day.get_lang("zh") == args.fs_or_st:
            formatted_time = day(args.year).strftime(args.format)
            print(formatted_time)
            
    
if __name__ == "__main__":
    main()

此時,可以通過提供--format,來按照需要格式化時間。

python my_lunar_find.py 春節(jié) 2025  # 輸出:2025年01月29日
python my_lunar_find.py 春節(jié) 2025 --format %Y/%m/%d  # 輸出:2025/01/29
python my_lunar_find.py 春節(jié) 2025 --format %Y-%m-%d  # 輸出:2025-01-29

安裝

編寫一份setup.py

from setuptools import setup
 
setup(
    name="my_lunar_find",
    version="1.0",
    py_modules=["my_lunar_find"],
    entry_points={
        "console_scripts": [
            "my-lunar-find = my_lunar_find:main",
        ],
    },
)

安裝:pip install .

注意:其中的.代表當(dāng)前路徑,因此需要在包含setup.py的目錄下運行。

此時,是安裝了一個我們自己的模塊,my-lunar-find==1.0

調(diào)用命令:my-lunar-find 春節(jié) 2025

到此這篇關(guān)于python中解析命令行參數(shù)的示例詳解的文章就介紹到這了,更多相關(guān)python解析命令行參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實現(xiàn)提取XML內(nèi)容并保存到Excel中的方法

    Python實現(xiàn)提取XML內(nèi)容并保存到Excel中的方法

    這篇文章主要介紹了Python實現(xiàn)提取XML內(nèi)容并保存到Excel中的方法,涉及Python針對xml文件的讀取、解析以及Excel文件的寫入、保存等相關(guān)操作技巧,需要的朋友可以參考下
    2018-09-09
  • 使用python構(gòu)建WebSocket客戶端的教程詳解

    使用python構(gòu)建WebSocket客戶端的教程詳解

    WebSocket是一種在客戶端和服務(wù)器之間實現(xiàn)雙向通信的協(xié)議,常用于實時聊天、實時數(shù)據(jù)更新等場景,Python提供了許多庫來實現(xiàn) WebSocket客戶端,本教程將介紹如何使用Python構(gòu)建WebSocket客戶端,文中通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • MATLAB 全景圖切割及盒圖顯示的實現(xiàn)步驟

    MATLAB 全景圖切割及盒圖顯示的實現(xiàn)步驟

    本文給大家分兩部分介紹,第一部分通過圖文的形式給大家介紹了全景圖切割的代碼,第二部分給大家介紹了盒圖展示效果的實現(xiàn)代碼,對MATLAB 全景圖切割相關(guān)知識感興趣的朋友,跟隨小編一起看看吧
    2021-05-05
  • python實現(xiàn)k-means聚類算法

    python實現(xiàn)k-means聚類算法

    這篇文章主要為大家詳細介紹了python實現(xiàn)k-means聚類算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 使用Django Form解決表單數(shù)據(jù)無法動態(tài)刷新的兩種方法

    使用Django Form解決表單數(shù)據(jù)無法動態(tài)刷新的兩種方法

    這篇文章主要介紹了使用Django Form解決表單數(shù)據(jù)無法動態(tài)刷新的兩種方法,需要的朋友可以參考下
    2017-07-07
  • python 中字典嵌套列表的方法

    python 中字典嵌套列表的方法

    今天小編就為大家分享一篇python 中字典嵌套列表的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python?Pandas庫簡介及一些常見用法總結(jié)

    Python?Pandas庫簡介及一些常見用法總結(jié)

    Pandas庫是Python的免費、開源的第三方庫,Pandas是Python數(shù)據(jù)分析必不可少的工具之一,這篇文章主要介紹了Python?Pandas庫簡介及一些常見用法的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-07-07
  • python?中?lxml?的?etree?標簽解析

    python?中?lxml?的?etree?標簽解析

    這篇文章主要介紹了python?中l(wèi)xml的etree?標簽解析,文章圍繞主題展開詳細內(nèi)容,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)或工作有所幫助
    2022-04-04
  • Gauss-Seidel迭代算法的Python實現(xiàn)詳解

    Gauss-Seidel迭代算法的Python實現(xiàn)詳解

    這篇文章主要介紹了Gauss-Seidel迭代算法的Python實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-06-06
  • 詳解Python單元測試的兩種寫法

    詳解Python單元測試的兩種寫法

    python的兩個單元測試包分別是 doctest 和 unittest,這兩個包的使用起來各有長處,適用于不同的場景,這篇文章主要介紹了Python單元測試的兩種寫法,需要的朋友可以參考下
    2022-07-07

最新評論

灌南县| 湖北省| 墨玉县| 长丰县| 台南市| 海晏县| 柳河县| 育儿| 南充市| 平武县| 息烽县| 鲜城| 肇源县| 平昌县| 诸暨市| 波密县| 乐平市| 镇安县| 蓬溪县| 恭城| 余干县| 祥云县| 阳西县| 福贡县| 张家界市| 西乌珠穆沁旗| 杂多县| 龙门县| 信丰县| 响水县| 娱乐| 黄陵县| 石狮市| 额济纳旗| 阿克陶县| 合山市| 台中市| 祁东县| 石城县| 阳曲县| 丹棱县|