首頁 後端開發 Python教學 Python命令列解析工具Argparse的詳細介紹

Python命令列解析工具Argparse的詳細介紹

Mar 04, 2017 pm 04:17 PM

最近在研究pathon的命令列解析工具,argparse,它是Python標準庫中推薦使用的編寫命令列程式的工具。

以前老是做UI程序,今天試了下命令列程序,感覺相當好,不用再花大把時間去研究界面問題,尤其是vc++中尤其繁瑣。

現在用python來實作命令列,核心運算模組可以用c自己寫擴充函式庫,效果還挺好。

學習了argparse,在官方文件中找到一篇toturial,簡單翻譯了下。

http://docs.python.org/2/howto/argparse.html#id1

Argparse Tutorial
這篇教學簡潔地介紹了Python標準函式庫推薦使用的指令行參數解析模組-Argparse的使用。

1、基本概念

 在這篇教學中我們透過一個常見的ls指令來展示argparse的功能。

$ ls
cpython devguide prog.py pypy rm-unused-function.patch
$ ls pypy
ctypes_configure demo dotviewer include lib_pypy lib-python ...
$ ls -l
total 20
drwxr-xr-x 19 wena wena 4096 Feb 18 18:51 cpython
drwxr-xr-x 4 wena wena 4096 Feb 8 12:04 devguide
-rwxr-xr-x 1 wena wena 535 Feb 19 00:05 prog.py
drwxr-xr-x 14 wena wena 4096 Feb 7 00:59 pypy
-rw-r--r-- 1 wena wena 741 Feb 18 01:01 rm-unused-function.patch
$ ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
登入後複製

從以上的四個指令中,我們能夠了解以下幾個基本概念:

1)、ls指令在沒有參數的情況下也是可以運作的,預設列印出目前目錄下的所有內容。
2)、如果我們想讓它展示更多內容,那麼我們需要給它多一點參數。在這種情況下,我們想要顯示一個不同的目錄,pypy。我們所做的就是明確了常見的定位參數(positional argument),這樣命名是因為需要程式根據參數在命令列中的位置而決定要做什麼。這個概念與指令cp更為接近,它的用法是cp src dest,src表示的是你想要拷貝的文件,dest表示你想要將文件拷貝到哪裡。
3)、現在,我想要改變程式的行為。在我們的例子中,我想顯示文件的向西資訊而不僅僅是文件名,參數-l 則是我們所知道的可選參數(optinal argument)
4)、最後一句是顯示幫助的文檔的一個片段,當你遇到你從未使用過的指令時,你可以透過它學習怎麼使用。

2、基本認知

我們從一個基本的程式開始(它什麼都不做)

import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
登入後複製

運行結果:

$ python prog.py
$ python prog.py --help
usage: prog.py [-h]

optional arguments:
 -h, --help show this help message and exit
$ python prog.py --verbose
usage: prog.py [-h]
prog.py: error: unrecognized arguments: --verbose
$ python prog.py foo
usage: prog.py [-h]
prog.py: error: unrecognized arguments: foo
登入後複製

結果分析:

1)、若不給參數而執行這個程序,將不會得到任何結果。
2)、第二個命名顯示了使用的argparse的好處,你什麼也沒做,卻得到了一個很好的幫助訊息。
3)、我們無需人為設定--help參數,就能得到一個好的幫助資訊。但是若給其他參數(例如foo)就會產生一個錯誤。

3、位置參數

首先,給一個例子:

#
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print args.echo
登入後複製

運行結果:

$ python prog.py
usage: prog.py [-h] echo
prog.py: error: the following arguments are required: echo
$ python prog.py --help
usage: prog.py [-h] echo

positional arguments:
 echo

optional arguments:
 -h, --help show this help message and exit
$ python prog.py foo
foo
登入後複製

結果分析:

這次,我們增加了一個add_argument()方法,用來設定程式可接受的命令列參數。
現在要執行程序,就必須設定一個參數。
parse_args()方法實際上從我們的命令列參數中傳回了一些數據,在上面的例子中是echo
這個像「魔法」一樣的過程,是argparse自動完成的。
儘管自動產生的幫助資訊展示地很美觀,但是我們仍然無法只根據echo這個參數知道它是做什麼的。所以,我們增加了一些東西,使得它變得更有用。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo", help="echo the string you use here")
args = parser.parse_args()
print args.echo
登入後複製

運行結果:

$ python prog.py -h
usage: prog.py [-h] echo

positional arguments:
 echo    echo the string you use here

optional arguments:
 -h, --help show this help message and exit
登入後複製

在此基礎上,我們再多改變一點:(計算輸入參數square的平方)

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number")
args = parser.parse_args()
print args.square**2
登入後複製

#下面是運行結果:

##

$ python prog.py 4
Traceback (most recent call last):
 File "prog.py", line 5, in <module>
  print args.square**2
TypeError: unsupported operand type(s) for ** or pow(): &#39;str&#39; and &#39;int&#39;
登入後複製

#這個程式並不能正確運行,因為argparse會將輸入當作字串處理,所以我們需要設定它的類型:(type=int)

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number",
          type=int)
args = parser.parse_args()
print args.square**2
登入後複製

下面是運行結果:

$ python prog.py 4
16
$ python prog.py four
usage: prog.py [-h] square
prog.py: error: argument square: invalid int value: &#39;four&#39;
登入後複製

現在,這個程式能夠順利運行,而且能夠處理一些錯誤輸入。

以上就是關於Python命令列解析工具Argparse的簡單使用教程,希望對大家有幫助。

更多Python指令列解析工具Argparse的詳細介紹相關文章請關注PHP中文網!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何解決Linux終端中查看Python版本時遇到的權限問題? 如何解決Linux終端中查看Python版本時遇到的權限問題? Apr 01, 2025 pm 05:09 PM

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? 如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? 在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? 如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? Apr 02, 2025 am 07:18 AM

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

在Linux終端中使用python --version命令時如何解決權限問題? 在Linux終端中使用python --version命令時如何解決權限問題? Apr 02, 2025 am 06:36 AM

Linux終端中使用python...

如何繞過Investing.com的反爬蟲機制獲取新聞數據? 如何繞過Investing.com的反爬蟲機制獲取新聞數據? Apr 02, 2025 am 07:03 AM

攻克Investing.com的反爬蟲策略許多人嘗試爬取Investing.com(https://cn.investing.com/news/latest-news)的新聞數據時,常常�...

See all articles