欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)文章

  • 詳解Django中views數(shù)據(jù)查詢使用locals()函數(shù)進行優(yōu)化

    詳解Django中views數(shù)據(jù)查詢使用locals()函數(shù)進行優(yōu)化

    這篇文章主要介紹了Django中views數(shù)據(jù)查詢使用locals()函數(shù)進行優(yōu)化,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • python字符串替換re.sub()方法解析

    python字符串替換re.sub()方法解析

    這篇文章主要介紹了python字符串替換re.sub()方法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • Python 實用技巧之利用Shell通配符做字符串匹配

    Python 實用技巧之利用Shell通配符做字符串匹配

    這篇文章主要介紹了Python 實用技巧之利用Shell通配符做字符串匹配的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • python實現(xiàn)飛機大戰(zhàn)

    python實現(xiàn)飛機大戰(zhàn)

    這篇文章主要為大家詳細介紹了python實現(xiàn)飛機大戰(zhàn)游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python3實現(xiàn)的簡單工資管理系統(tǒng)示例

    Python3實現(xiàn)的簡單工資管理系統(tǒng)示例

    這篇文章主要介紹了Python3實現(xiàn)的簡單工資管理系統(tǒng),涉及Python文件讀寫、數(shù)據(jù)遍歷、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • Django如何利用uwsgi和nginx修改代碼自動重啟

    Django如何利用uwsgi和nginx修改代碼自動重啟

    這篇文章主要介紹了Django如何利用uwsgi和nginx修改代碼自動重啟問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 利用Python腳本在Nginx和uwsgi上部署MoinMoin的教程

    利用Python腳本在Nginx和uwsgi上部署MoinMoin的教程

    這篇文章主要介紹了利用Python腳本在Nginx和uwsgi上部署MoinMoin的教程,示例基于CentOS操作系統(tǒng),需要的朋友可以參考下
    2015-05-05
  • Windows系統(tǒng)下多版本pip的共存問題詳解

    Windows系統(tǒng)下多版本pip的共存問題詳解

    這篇文章主要給大家介紹了關(guān)于在Windows系統(tǒng)下多版本pip的共存問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • Python 實現(xiàn)PS濾鏡中的徑向模糊特效

    Python 實現(xiàn)PS濾鏡中的徑向模糊特效

    這篇文章主要介紹了Python 實現(xiàn) PS 濾鏡中的徑向模糊特效,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2020-12-12
  • Python虛擬機字節(jié)碼教程之裝飾器實現(xiàn)詳解

    Python虛擬機字節(jié)碼教程之裝飾器實現(xiàn)詳解

    在本篇文章當(dāng)中主要給大家介紹在?cpython?當(dāng)中一些比較常見的字節(jié)碼,從根本上理解?python?程序的執(zhí)行。在本文當(dāng)中主要介紹一些?python?基本操作的字節(jié)碼,并且將從字節(jié)碼的角度分析函數(shù)裝飾器的原理
    2023-04-04

最新評論