網站首頁 編程語言 正文
簡介
除ide的執行方式外,命令行的方式執行Python腳本是參數化程序執行的一種常見且簡單的方法,正確處理命令行參數,可以提供給包含某種參數化信息的程序或腳本的參數。例如處理目錄或者文件通常作為命令行參數傳遞給腳本,用于使程序可以處理不同圖片或者不同類型文件。
基本形式
python main.py -a v1 -b v2 ...
3種常見的獲取和解析命令行參數的方法
1、sys.argv
2、getopt
3、argparse
sys.argv案例
1、sys.argv返回一個列表,第一個值為腳本名稱,列表的值類型為string。
2、參數數量:len(sys.argv)
3、獲取全部參數:sys.argv
案例源碼1
# -*- coding: utf-8 -*-
# time: 2022/9/1 0:10
# file: args_demo.py
# 公眾號: 玩轉測試開發
import sys
def f1():
print(f"正在運行的腳本名稱: {sys.argv[0]}")
print(f"腳本的參數數量: {len(sys.argv)}")
print(f"腳本的參數: {sys.argv}")
if __name__ == '__main__':
f1()
執行結果:
getopt案例:getopt 模塊是專門處理命令行參數的模塊,用于獲取命令行選項和參數。命令行選項使得程序的參數更加靈活,其支持短選項模式(-)和雙-選項模式(--)。該模塊提供了兩個方法及一個異常處理來解析命令行參數。
語法格式:
getopt.getopt(args, options[, long_options])
參數說明:
args:要解析的命令行參數列表,一般是sys.argv[1:],需要過濾掉腳本名(sys.argv[0])
options:以字符串的格式定義,options 后的冒號 “:” ,表示如果設置該選項,必須有附加的參數,否則就不附加參數
long_options:以列表的格式定義,long_options 后的等號 “=” ,表示該選項必須有附加的參數,不帶冒號表示該選項不附加參數
案例源碼2
# -*- coding: utf-8 -*-
# time: 2022/9/1 0:10
# file: args_demo.py
# 公眾號: 玩轉測試開發
import sys
import getopt
def f1():
print(f"正在運行的腳本名稱: {sys.argv[0]}")
print(f"腳本的參數數量: {len(sys.argv)}")
print(f"腳本的參數: {sys.argv}")
def f2(argv):
input_file = ""
output_file = ""
opts, args = getopt.getopt(argv[1:], "hi:o:", ["help", "input_file=", "output_file="])
# "hi:o:": 短格式分析串, h 后面沒有冒號, 表示后面不帶參數; i 和 o 后面帶有冒號, 表示后面帶參數
# ["help", "input_file=", "output_file="]: 長格式分析串列表, help后面沒有等號, 表示后面不帶參數; input_file和output_file后面帶冒號, 表示后面帶參數
# 返回值包括 `opts` 和 `args`, opts 是以元組為元素的列表, 每個元組的形式為: (選項, 附加參數),如: ('-i', 'test.png');
# args是個列表,其中的元素是那些不含'-'或'--'的參數
for opt, arg in opts:
if opt in ("-h", "--help"):
# 即:處理 -h參數的案例說明,幫助文檔等
print('args_demo.py -i <input_file> -o <output_file>')
print('or: args_demo.py --input_file=<input_file> --output_file=<output_file>')
sys.exit()
elif opt in ("-i", "--input_file"):
input_file = arg
elif opt in ("-o", "--output_file"):
output_file = arg
print(f'輸入文件為:{input_file}')
print(f'輸出文件為:{output_file}')
# 打印不含'-'或'--'的參數
for i in range(0, len(args)):
print(f'不含 - 或 -- 的參數 {i + 1} 為:{args[i]}')
if __name__ == '__main__':
# f1()
f2(sys.argv)
命令行依次執行:
python args_demo.py -h
python args_demo.py -i a.txt
python args_demo.py -o b.txt
python args_demo.py -i a.txt -o b.txt c.txt
執行結果:
Exception getopt.GetoptError:在參數列表中沒有找到所傳遞參數,或選項的需要的參數為空時會觸發該異常。異常的參數是一個字符串,表示錯誤的原因。屬性 msg 和 opt 為相關選項的錯誤信息。在上述代碼中添加異常處理,檢查此錯誤信息。
使用錯誤的格式選項傳遞參數執行腳本:python args_demo.py -q
argparse案例:當程序中使用采用復雜參數或多個文件名時,推薦使用 Python 的 argparse 庫,它以系統的方式處理命令行參數,從而可以編寫用戶友好的命令行程序。Python 標準庫 argparse 同樣也是用于解析命令行參數的模塊。首先,由程序確定所需的參數,然后 argparse 將這些參數解析為 sys.argv。此外,argparse 會生成幫助和使用信息提示,并在提供無效參數時發出錯誤。為了介紹此模塊,編寫 argparse_demo1.py,如下所示:
為了介紹此模塊,編寫 argparse_demo1.py,如下所示:
案例1
不帶參數運行此腳本不會向 stdout 顯示任何內容。但是,如果使用 --help 或 -h 選項,將得到腳本的使用信息提示
import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
執行結果:
(venv)>python argparse_demo.py -h
usage: argparse_demo.py [-h]
optional arguments:
? -h, --help ?show this help message and exit
(venv)>python argparse_demo.py --help
usage: argparse_demo.py [-h]
optional arguments:
? -h, --help ?show this help message and exit
案例2
指定其他參數會導致錯誤python argparse_demo.py -q
python argparse_demo.py -q
usage: argparse_demo.py [-h]
argparse_demo.py: error: unrecognized arguments: -q
案例3
添加一個參數需要調用方法 parser.add_argument
# -*- coding: utf-8 -*-
# time: 2022/8/31 16:20
# file: argparse_demo1.py
# author: tom
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("name", help="添加的第1個參數name,姓名。")
args = parser.parse_args()
print(f"args.name:{args.name}")
print(f"type:{type(args.name)}")
使用范例:
python argparse_demo1.py tom
python argparse_demo1.py -h
python argparse_demo1.py
執行結果:此時不帶參數運行腳本則拋出缺少參數name
(venv) >python argparse_demo.py tom
args.name:tom
type:<class 'str'>
(venv) >python argparse_demo.py -h
usage: argparse_demo.py [-h] name
positional arguments:
? name ? ? ? ?添加的第1個參數name,姓名。
optional arguments:
? -h, --help ?show this help message and exit
(venv) >python argparse_demo.py
usage: argparse_demo.py [-h] name
argparse_demo.py: error: the following arguments are required: name
使用--的形式:使用-的形式則--name改成 -name即可。
案例4
argparse 將提供的選項默認視為字符串,新增int類型的案例
# -*- coding: utf-8 -*-
# time: 2022/8/31 16:20
# file: argparse_demo1.py
# author: tom
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--name", help="添加的第1個參數name,姓名。")
parser.add_argument("--age", help="添加的第2個參數age,年齡。", type=int)
args = parser.parse_args()
print(f"args.name:{args.name}")
print(f"type:{type(args.name)}")
print("*" * 50)
print(f"args.age:{args.age}")
print(f"type:{type(args.age)}")
使用范例:可使用兩種形式 --key=value ?/ ?--key value
python argparse_demo.py --name=tom --age=30
python argparse_demo.py --name tom --age 30
執行結果:
(venv) >python argparse_demo.py --name=tom --age=30
args.name:tom
type:<class 'str'>
**************************************************
args.age:30
type:<class 'int'>
(venv) >python argparse_demo.py --name tom --age 30
args.name:tom
type:<class 'str'>
**************************************************
args.age:30
type:<class 'int'>
原文鏈接:https://mp.weixin.qq.com/s/JNURdh-3BKV6QQnC7p0luQ
相關推薦
- 2022-10-22 SQLMAP插件tamper模塊簡介_MsSql
- 2022-04-01 OpenCV實現摳圖工具_C 語言
- 2023-02-15 Go?Comparable?Type原理深入解析_Golang
- 2022-03-03 手寫一個angular中帶checkbox的table組件
- 2023-03-23 Nginx實現http自動跳轉到https_nginx
- 2022-08-26 教你用python從日期中獲取年、月、日和星期等30種信息_python
- 2024-01-27 Apache POI 及 alibaba EasyExcel使用
- 2022-02-24 開機時自動運行批處理
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支