使用 Python 解析引數
使用 argparse 模組像專業人士一樣解析引數。
如果你在使用 Python 進行開發,你可能會在終端中使用命令,即使只是為了啟動 Python 指令碼或使用 pip 安裝 Python 模組。命令可能簡單而單一:
$ ls
命令也可能需要引數:
$ ls example
命令也可以有選項或標誌:
$ ls --color example
有時選項也有引數:
$ sudo firewall-cmd --list-all --zone home
引數
POSIX shell 會自動將你輸入的內容作為命令分成陣列。例如,這是一個簡單的命令:
$ ls example
命令 ls
的位置是 $0
,引數 example
位置是 $1
。
你可以寫一個迴圈迭代每項。確定它是否是命令、選項還是引數。並據此採取行動。幸運的是,已經有一個名為 argparse 的模組。
argparse
argparse 模組很容易整合到 Python 程式中,並有多種便利功能。例如,如果你的使用者更改選項的順序或使用一個不帶引數的選項(稱為布林,意味著選項可以開啟或關閉設定),然後另一個需要引數(例如 --color red
),argparse 可以處理多種情況。如果你的使用者忘記了所需的選項,那麼 argparse 模組可以提供友好的錯誤訊息。
要在應用中使用 argparse,首先要定義為使用者提供的選項。你可以接受幾種不同的引數,而語法一致又簡單。
這是一個簡單的例子:
#!/usr/bin/env python
import argparse
import sys
def getOptions(args=sys.argv[1:]):
parser = argparse.ArgumentParser(description="Parses command.")
parser.add_argument("-i", "--input", help="Your input file.")
parser.add_argument("-o", "--output", help="Your destination output file.")
parser.add_argument("-n", "--number", type=int, help="A number.")
parser.add_argument("-v", "--verbose",dest='verbose',action='store_true', help="Verbose mode.")
options = parser.parse_args(args)
return options
此示例程式碼建立一個名為 getOptions
的函式,並告訴 Python 檢視每個可能的引數,前面有一些可識別的字串(例如 --input
或者 -i
)。 Python 找到的任何選項都將作為 options
物件從函式中返回(options
是一個任意名稱,且沒有特殊含義。它只是一個包含函式已解析的所有引數的摘要的資料物件)。
預設情況下,Python 將使用者給出的任何引數視為字串。如果需要提取整數(數字),則必須指定選項 type=int
,如示例程式碼中的 --number
選項。
如果你有一個只是關閉和開啟功能的引數,那麼你必須使用 boolean
型別,就像示例程式碼中的 --verbose
標誌一樣。這種選項只儲存 True
或 False
,使用者用來指定是否使用標誌。如果使用該選項,那麼會啟用 stored_true
。
當 getOptions
函式執行時,你就可以使用 options
物件的內容,並讓程式根據使用者呼叫命令的方式做出決定。你可以使用測試列印語句檢視 options
的內容。將其新增到示例檔案的底部:
print(getOptions())
然後帶上引數執行程式碼:
$ python3 ./example.py -i foo -n 4
Namespace(input='foo', number=4, output=None, verbose=False)
檢索值
示例程式碼中的 options
物件包含了使用者提供的選項後面的值(或派生的布林值)。例如,在示例程式碼中,可以通過 options.number
來檢索 --number
。
options = getOptions(sys.argv[1:])
if options.verbose:
print("Verbose mode on")
else:
print("Verbose mode off")
print(options.input)
print(options.output)
print(options.number)
# 這裡插入你的 Python 程式碼
示例中的布林選項 --verbose
是通過測試 options.verbose
是否為 True
(意味著使用者使用了 --verbose
標誌)或 False
(使用者沒有使用 --verbose
標誌),並採取相應的措施。
幫助和反饋
argparse 還包含一個內建的 --help
(簡寫 -h
)選項,它提供了有關如何使用命令的提示。這是從你的程式碼派生的,因此生成此幫助系統不需要額外的工作:
$ ./example.py --help
usage: example.py [-h] [-i INPUT] [-o OUTPUT] [-n NUMBER] [-v]
Parses command.
optional arguments:
-h, --help show this help message and exit
-i INPUT, --input INPUT
Your input file.
-o OUTPUT, --output OUTPUT
Your destination output file.
-n NUMBER, --number NUMBER
A number.
-v, --verbose Verbose mode.
像專業人士一樣用 Python 解析
這是一個簡單的示例,來演示如何在 Python 應用中的解析引數以及如何快速有效地記錄它的語法。下次編寫 Python 指令碼時,請使用 argparse 為其提供一些選項。你以後會感到自得,你的命令不會像一個快速的臨時指令碼,更像是一個“真正的” Unix 命令!
以下是可用於測試的示例程式碼:
#!/usr/bin/env python3
# GNU All-Permissive License
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved. This file is offered as-is,
# without any warranty.
import argparse
import sys
def getOptions(args=sys.argv[1:]):
parser = argparse.ArgumentParser(description="Parses command.")
parser.add_argument("-i", "--input", help="Your input file.")
parser.add_argument("-o", "--output", help="Your destination output file.")
parser.add_argument("-n", "--number", type=int, help="A number.")
parser.add_argument("-v", "--verbose",dest='verbose',action='store_true', help="Verbose mode.")
options = parser.parse_args(args)
return options
options = getOptions(sys.argv[1:])
if options.verbose:
print("Verbose mode on")
else:
print("Verbose mode off")
print(options.input)
print(options.output)
print(options.number)
via: https://opensource.com/article/19/7/parse-arguments-python
作者:Seth Kenlon 選題:lujun9972 譯者:geekpi 校對:wxy
訂閱“Linux 中國”官方小程式來檢視
相關文章
- python引數解析argparse用法Python
- python argparse(引數解析模組)Python
- Python命令列引數解析模組argparsePython命令列
- Shell解析引數
- Python中最好用的命令列引數解析工具Python命令列
- 命令列引數解析模組argparse的使用命令列
- Python使用Argparse讀取命令引數Python
- python預設引數的使用注意Python
- canvas transform引數解析CanvasORM
- js解析url引數JS
- 解析型別引數型別
- CNN模型引數解析CNN模型
- Curl 命令引數解析
- python引數Python
- Python解析引數的三種方法分別是什麼?Python
- Hystrix 配置引數全解析
- SpringMVC請求引數解析SpringMVC
- 做ftp專案中使用命令列引數及 ----python 命令列 解析模組 optparseFTP命令列Python
- Python多值引數Python
- (2)python引數Python
- python parameter引數Python
- python變數和引數Python變數
- python使用引數對巢狀字典進行取值Python巢狀
- python初識引數Python
- 引數匹配模型——Python學習之引數(二)模型Python
- linux的命令列解析引數之getopt_long函式使用Linux命令列函式
- SpringBoot是如何解析引數的Spring Boot
- SpringBoot自定義控制層引數解析Spring Boot
- 認識Spring引數解析器Spring
- 引數匹配順序——Python學習之引數(三)Python
- Python函式/動態引數/關鍵字引數Python函式
- python---函式引數、變數Python函式變數
- Python逆向爬蟲入門教程: 千千音樂加密引數 sign 逆向解析Python爬蟲加密
- Python基礎(11):引數Python
- Python中的引數遮蔽Python
- python疑問5:位置引數,預設引數,可變引數,關鍵字引數,命名關鍵字引數區別Python
- layer Tips引數使用
- JWT+SpringBoot+SpringMVC引數解析器JWTSpring BootSpringMVC