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

python開(kāi)發(fā)簡(jiǎn)單的命令行工具簡(jiǎn)介

 更新時(shí)間:2023年02月01日 08:37:55   作者:Feyncode  
這篇文章主要介紹了python開(kāi)發(fā)簡(jiǎn)單的命令行工具實(shí)例的相關(guān)資料,需要的朋友可以參考下

介紹

Python模塊argparse,這是一個(gè)命令行選項(xiàng),參數(shù)和子命令的解釋器,使用該模塊可以編寫友好的命令行工具,在程序中定義好需要的參數(shù),argparse將弄清楚如何解析 sys.argv中的參數(shù)。argparse模塊還支持自動(dòng)生成幫助和用法信息,當(dāng)模塊解析到無(wú)效參數(shù)時(shí),還可以發(fā)出錯(cuò)誤。

python標(biāo)準(zhǔn)庫(kù)sys模塊

sys.agv				#命令行參數(shù)List,第一個(gè)元素時(shí)程序本身路徑
sys.exit(n)		#退出程序,正常退出時(shí)exit(0)
sys.version 	#獲取Python解釋程序的版本信息
sys.maxint 		#最大的Int值
sys.path			#返回模塊的搜索路徑,初始化時(shí)使用PYTHONPATH環(huán)境變量的值
sys.stdin			#輸入線管
sys.stdout		#輸出相關(guān)
sys.stderror	#錯(cuò)誤相關(guān)

命令行工具

我們使用過(guò)很多的命令行工具,那么python開(kāi)發(fā)出的命令行工具,能列舉出哪些呢?
其實(shí)python本身就是一個(gè)命令行工具,在cmd中使用python --help,能輸出python的幫助語(yǔ)句,這就是命令行工具解析參數(shù)后輸出的一個(gè)例子。
再有,pip 也是一個(gè)典型的例子,在使用pip時(shí),不同的子命令可以達(dá)成不同的效果。
當(dāng)然知道和做到相距實(shí)在太過(guò)遙遠(yuǎn),我也很難寫出一個(gè)python或pip。

概念

argparse是一個(gè)較大的模塊,提供了很多功能,它的文檔相當(dāng)詳細(xì)和完整,包含大量示例。所以學(xué)習(xí)該模塊最好的教程就是官方文檔,argparse( https://docs.python.org/zh-cn/3/library/argparse.html),那么為什么我沒(méi)去看呢,一方面是我并不需要復(fù)雜的功能,另一方面我的英語(yǔ)閱讀能力不足以讓我完全理解該文檔。我們必須承認(rèn),英語(yǔ)水平分開(kāi)了普通的技術(shù)人員,因此我正在努力提升英語(yǔ)水平。
在開(kāi)發(fā)一個(gè)命令行工具前,我們首先需要知道一個(gè)命令行工具包含了哪些內(nèi)容,它又是怎么識(shí)別我們提供的參數(shù)的,識(shí)別后又是怎么提供輸出的,對(duì)待錯(cuò)誤的選項(xiàng),它又是如何調(diào)整的。
因此,官網(wǎng)使用了 ‘ls’ 這個(gè)命令來(lái)介紹命令行工具的幾個(gè)概念:

  • ls 是一個(gè)即使在運(yùn)行的時(shí)候沒(méi)有提供任何選項(xiàng),也非常有用的命令。在默認(rèn)情況下他會(huì)輸出當(dāng)前文件夾包括的內(nèi)容。
  • 如果我們想要使用比它默認(rèn)提供的更多功能,我們需要告訴該命令更多信息。我們可以指定所謂的位置參數(shù),之所以這樣命名,是因?yàn)槌绦驊?yīng)該如何處理該參數(shù)值,完全取決于它在命令行出現(xiàn)的文職。更能體現(xiàn)這個(gè)概念的命令如 cp ,它最基本的用法是 cp SRC DEST,第一個(gè)位置參數(shù)指的是你想要復(fù)制的,第二個(gè)位置參數(shù)指的是你想要復(fù)制到的位置。
  • 現(xiàn)在假設(shè)我們想要改變這個(gè)程序的行為。使用 **ls -l ,**我們可以輸出更多的信息,在這個(gè)例子中,-l 被稱為可選參數(shù)。
  • **–help **通常被用來(lái)輸出幫助文檔,它是非常有用的,因?yàn)楫?dāng)你遇到一個(gè)你從未使用過(guò)的程序時(shí),你可以通過(guò)閱讀它的幫助文檔來(lái)弄清楚它是如何運(yùn)行的。

了解了這些,我們通過(guò)幾個(gè)例子可以更好的說(shuō)明這個(gè)模塊是如何解析從命令行獲取的參數(shù)的,并且解析出的參數(shù)又是如何被程序使用的。

基礎(chǔ)

命令行參數(shù)解析很容易,但是它也可以被加入很多參數(shù),注入很多定義,這讓最后的程序變得不堪入目,為了防止我的朋友,也就是你,在開(kāi)始就頭痛,我首先帶來(lái)一個(gè)我認(rèn)為最簡(jiǎn)單的案例。

示例

所有解析都應(yīng)當(dāng)配有示例,并展示對(duì)比來(lái)說(shuō)明程序的行為有哪些改變。

argparse使用主要有四個(gè)步驟:

  • 導(dǎo)入argparse包
  • 創(chuàng)建 ArgumentParser() 參數(shù)對(duì)象
  • 調(diào)用 add_argument() 方法往參數(shù)對(duì)象中添加參數(shù)
  • 使用 parse_args() 解析添加參數(shù)的參數(shù)對(duì)象,獲得解析對(duì)象
  • 程序其他部分,當(dāng)需要使用命令行參數(shù)時(shí),使用解析對(duì)象.參數(shù)獲取

在未使用argparse模塊前,我編寫了這樣一個(gè)python文件。

print("hello world!")

我們很熟悉這個(gè)案例,毫無(wú)疑問(wèn)我們清楚python運(yùn)行該文件時(shí)會(huì)得到什么樣的輸出,當(dāng)我們?cè)诮K端運(yùn)行這個(gè)python文件demo1時(shí),我們會(huì)使用以下命令。

$ python demo1.py
hello world!

是的,我們看到在命令行中,運(yùn)行該文件輸出了我們想要的結(jié)果,一般情況下,我們需要python文件輸出某個(gè)值時(shí),要么我們將該值在文件中寫死,就像上面這個(gè)例子一樣,我們已經(jīng)在文件中將想要的輸出寫死在文件中,這個(gè)值在未被輸出時(shí)就已經(jīng)在程序中被決定。如果我們需要用戶在終端中向程序提供某些值,來(lái)改變程序的行為,得到不同的輸出,我們常用的手段是使用input,讓程序讀入終端的輸入來(lái)達(dá)到這樣的效果。不過(guò)這樣做仍然需要手動(dòng)的輸入,如果是自動(dòng)化程序,那么可以使用參數(shù)直接帶入需要的變量將大大減少這樣的交互。
接下來(lái)我將演示如何使用argparse來(lái)完成一個(gè)簡(jiǎn)單的參數(shù)解析。

import argparse #導(dǎo)入argparse包

parse = argparse.ArgumentParser() #創(chuàng)建參數(shù)對(duì)象
parse.add_argument('hello') #向參數(shù)對(duì)象中添加參數(shù)
args = parse.parse_args() #解析參數(shù)對(duì)象獲得解析對(duì)象
if __name__ == '__main__':
   print(args.hello)

讓我們來(lái)運(yùn)行一下這個(gè)程序

$ python demo1.py helloworld
helloworld

很簡(jiǎn)單,這是一個(gè)容易的例子,需要注意的是,由于沒(méi)有指定,所以命令行參數(shù)輸入默認(rèn)按順序復(fù)制,順序不同的話得到的結(jié)果將不同。
接下來(lái)我將帶入一些官網(wǎng)上的案例,來(lái)繼續(xù)解釋argparse的一些進(jìn)階示例。

使用介紹

  • –help 選項(xiàng),也可縮寫為 -h,是唯一一個(gè)可以直接使用的選項(xiàng)(即不需要指定該選項(xiàng)的內(nèi)容)。指定任何內(nèi)容都會(huì)導(dǎo)致錯(cuò)誤。即便如此,我們也能直接得到一條有用的用法信息。

add_argument()方法,定義如何解析命令行參數(shù),對(duì)于該方法,參數(shù)解釋如下:

  • name or flags - 選項(xiàng)字符串的名字或者列表,例如 foo 或者 -f, --foo。
  • action - 命令行遇到參數(shù)時(shí)的動(dòng)作,默認(rèn)值是 store。
    • store_const,表示賦值為const;
  • – append,將遇到的值存儲(chǔ)成列表,也就是如果參數(shù)重復(fù)則會(huì)保存多個(gè)值;
  • – append_const,將參數(shù)規(guī)范中定義的一個(gè)值保存到一個(gè)列表;
  • – count,存儲(chǔ)遇到的次數(shù);此外,也可以繼承 argparse.Action 自定義參數(shù)解析;
  • nargs - 應(yīng)該讀取的命令行參數(shù)個(gè)數(shù),可以是
  • 具體的數(shù)字,或者是?號(hào),當(dāng)不指定值時(shí)對(duì)于 Positional argument 使用 default,對(duì)于 Optional argument 使用 const
  • 或者是 * 號(hào),表示 0 或多個(gè)參數(shù);
  • 或者是 + 號(hào)表示 1 或多個(gè)參數(shù)。
  • const - action 和 nargs 所需要的常量值。
  • default - 不指定參數(shù)時(shí)的默認(rèn)值。
  • type - 命令行參數(shù)應(yīng)該被轉(zhuǎn)換成的類型。
  • choices - 參數(shù)可允許的值的一個(gè)容器。
  • required - 可選參數(shù)是否可以省略 (僅針對(duì)可選參數(shù))。
  • help - 參數(shù)的幫助信息,當(dāng)指定為 argparse.SUPPRESS 時(shí)表示不顯示該參數(shù)的幫助信息.
  • metavar - 在 usage 說(shuō)明中的參數(shù)名稱,對(duì)于必選參數(shù)默認(rèn)就是參數(shù)名稱,對(duì)于可選參數(shù)默認(rèn)是全大寫的參數(shù)名稱.
  • dest - 解析后的參數(shù)名稱,默認(rèn)情況下,對(duì)于可選參數(shù)選取最長(zhǎng)的名稱,中劃線轉(zhuǎn)換為下劃線.

可選參數(shù)設(shè)置

通過(guò)在參數(shù)名前加 --, 設(shè)置為可選參數(shù),如果未輸入,則使用default默認(rèn)值,若為設(shè)置default則默認(rèn)賦值 None

parse.add_argument('-n', '--name', type=str, metavar='name', help='New flavor name')

引用名,可以縮短參數(shù)名,簡(jiǎn)化命令行參數(shù)輸入;也就是使用-n或者-name可以獲得一樣的效果

必選參數(shù)設(shè)置

需要一個(gè)必選參數(shù)時(shí),則設(shè)置required=True,這時(shí),無(wú)論參數(shù)是否時(shí)可選參數(shù),都必須輸入

列表參數(shù)傳入設(shè)置

添加narg='+' 這樣可以在命令行中添加若干個(gè)參數(shù),傳入后將被添加到列表中。

互斥參數(shù)

也就是add_mutually_exclusive_group方法,這讓我們可以添加兩個(gè)互相排斥的參數(shù),也就是只能選擇其中一個(gè)參數(shù)添加

默認(rèn)參數(shù)設(shè)置

set_defaults()可以設(shè)置一些參數(shù)的默認(rèn)值

到此這篇關(guān)于python開(kāi)發(fā)簡(jiǎn)單的命令行工具簡(jiǎn)介的文章就介紹到這了,更多相關(guān)python開(kāi)發(fā)簡(jiǎn)單的命令行工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 三分鐘內(nèi)解決cfgrib的安裝問(wèn)題

    三分鐘內(nèi)解決cfgrib的安裝問(wèn)題

    這篇文章主要介紹了三分鐘內(nèi)解決cfgrib的安裝問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 初次部署django+gunicorn+nginx的方法步驟

    初次部署django+gunicorn+nginx的方法步驟

    這篇文章主要介紹了初次部署django+gunicorn+nginx的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • python中def是做什么的

    python中def是做什么的

    在本篇文章里小編給大家分享的是關(guān)于python中def的作用以及相關(guān)用法,有需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • 淺談哪個(gè)Python庫(kù)才最適合做數(shù)據(jù)可視化

    淺談哪個(gè)Python庫(kù)才最適合做數(shù)據(jù)可視化

    數(shù)據(jù)可視化是任何探索性數(shù)據(jù)分析或報(bào)告的關(guān)鍵步驟,目前有許多非常好的商業(yè)智能工具,比如Tableau、googledatastudio和PowerBI等,本文就詳細(xì)的進(jìn)行對(duì)比,感興趣的可以了解一下
    2021-06-06
  • 使用Python的Flask框架來(lái)搭建第一個(gè)Web應(yīng)用程序

    使用Python的Flask框架來(lái)搭建第一個(gè)Web應(yīng)用程序

    Flask框架是一個(gè)以輕量級(jí)著稱的Web開(kāi)發(fā)框架,近兩年來(lái)在Web領(lǐng)域獲得了極高的人氣,這里我們就來(lái)看如何使用Python的Flask框架來(lái)搭建第一個(gè)Web應(yīng)用程序
    2016-06-06
  • 10行Python代碼實(shí)現(xiàn)Web自動(dòng)化管控的示例代碼

    10行Python代碼實(shí)現(xiàn)Web自動(dòng)化管控的示例代碼

    這篇文章主要介紹了10行Python代碼實(shí)現(xiàn)Web自動(dòng)化管控的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • python 密碼學(xué)示例——?jiǎng)P撒密碼的實(shí)現(xiàn)

    python 密碼學(xué)示例——?jiǎng)P撒密碼的實(shí)現(xiàn)

    這篇文章主要介紹了python 密碼學(xué)示例——?jiǎng)P撒密碼的實(shí)現(xiàn),幫助大家更好的利用python處理密碼,感興趣的朋友可以了解下
    2020-09-09
  • pip安裝python庫(kù)的方法總結(jié)

    pip安裝python庫(kù)的方法總結(jié)

    在本篇文章里小編給大家分享了關(guān)于使用pip安裝python庫(kù)的幾種常用方法,有需要的朋友們可以參考下。
    2019-08-08
  • python interpret庫(kù)訓(xùn)練模型助力機(jī)器學(xué)習(xí)

    python interpret庫(kù)訓(xùn)練模型助力機(jī)器學(xué)習(xí)

    這篇文章主要為大家介紹了python interpret庫(kù)訓(xùn)練模型功能特性,為你的機(jī)器學(xué)習(xí)提供便捷的路徑,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • pandas表連接 索引上的合并方法

    pandas表連接 索引上的合并方法

    今天小編就為大家分享一篇pandas表連接 索引上的合并方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06

最新評(píng)論

台南市| 古丈县| 闸北区| 马边| 澳门| 桃园县| 东城区| 仁怀市| 年辖:市辖区| 黄骅市| 兴山县| 博客| 武平县| 神木县| 北宁市| 乳山市| 昌宁县| 大同市| 卢氏县| 饶平县| 社会| 前郭尔| 铁岭县| 吉安县| 江川县| 拉孜县| 海伦市| 普宁市| 昌乐县| 齐河县| 长沙市| 黄大仙区| 京山县| 开化县| 朝阳县| 宁强县| 黄石市| 万宁市| 肥城市| 旬邑县| 社旗县|