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

一文搞懂關(guān)于?sys.argv?的詳解

 更新時(shí)間:2023年01月15日 11:41:51   作者:不渴望力量的哈  
sys.argv?其實(shí)就是一個(gè)列表,里邊需要用戶傳入的參數(shù),關(guān)鍵就是要明白這參數(shù)是從程序外部輸入的,而非代碼本身的什么地方,要想看到它的效果就應(yīng)該將程序保存了,從外部來(lái)運(yùn)行程序并給出參數(shù),通過(guò)本文學(xué)習(xí)你將明白?sys.argv很多知識(shí),感興趣的朋友一起看看吧

詳解 sys.argv

關(guān)于 sys.argv 可得好好說(shuō)道說(shuō)道了。當(dāng)初我可是被折磨的不要不要的,上一章節(jié)我們提到 argv 是獲取程序外部的參數(shù),返回值是一個(gè)列表。

說(shuō)實(shí)話我一直在 python 解釋器、idea 運(yùn)行,試圖從結(jié)果發(fā)現(xiàn)它的用途,然而結(jié)果一直都是沒(méi)結(jié)果,也在網(wǎng)上查了許多資料,大部分都是轉(zhuǎn)裁和復(fù)制的。給的都是簡(jiǎn)明python教程上那個(gè)一長(zhǎng)串代碼的例子,說(shuō)看了就明白了,可我看得暈頭轉(zhuǎn)向的還是沒(méi)真正明白,只知道 sys.argv[0] 表示當(dāng)前腳本本身文件路徑的該腳本文件。后來(lái)經(jīng)過(guò)大量努力,多方求教才真正明悟了,謹(jǐn)以記錄和分享,希望能從另一個(gè)角度給同在求索過(guò)程中的同學(xué)一點(diǎn)啟發(fā)。

sys.argv 其實(shí)就是一個(gè)從程序外部獲取參數(shù) 的橋梁,這里所說(shuō)的 外部 很關(guān)鍵,所以那些試圖從代碼來(lái)說(shuō)明它作用的解釋一直沒(méi)看明白。因?yàn)槲覀冃枰仍诮K端執(zhí)行腳本, 并從外部傳入?yún)?shù)(可以是多個(gè)),所以獲得的是一個(gè)列表(list),也就是說(shuō)sys.argv其實(shí)可以看作是一個(gè)列表,所以才能用[ ]提取其中的元素。其第一個(gè)元素是程序本身,隨后才依次是外部傳入的參數(shù)。

我們先來(lái)看一下 sys.argv 返回的是什么?

import sys
print(sys.argv)

# >>> 執(zhí)行結(jié)果如下:
# >>> ['/Users/username/PycharmProjects/XXXXX/XXXXX/animal/package_sys.py']
# >>> 從執(zhí)行結(jié)果可以看出 其輸出的就是當(dāng)前路徑下的當(dāng)前腳本本身,也就可以理解為 'sys.argv' 其實(shí)就是運(yùn)行自身的腳本文件 
# >>> 我們從 '外部' 運(yùn)行該腳本文件的時(shí)候,需要傳入?yún)?shù)(可以是多個(gè))

接下來(lái)我們將上面的代碼改為如下:

import sys
print(sys.argv[0], sys.argv[1])
# >>> 接下來(lái)我們進(jìn)入 Terminal 終端 利用 python 執(zhí)行 該腳本文件,并傳入 測(cè)試參數(shù),結(jié)果如下圖。

為了更好的 演示 sys.argv 屬性,我們將 sys 常用的函數(shù)與屬性進(jìn)行一下條件判斷。示例如下:

import sys
command = sys.argv[1]
if command == 'modules':
    modules = sys.modules
    print(modules)
elif command == 'path':
    path = sys.path
    print(path)
elif command == 'encoding':
    code = sys.getdefaultencoding()
    print(code)
elif command == 'platform':
    print(sys.platform)
elif command == 'version':
    print(sys.version)
else:
    print('該命令未識(shí)別')

然后在 Terminal 終端 執(zhí)行該腳本,如下圖:

看到這里 ,應(yīng)該明白了吧?sys.argv 其實(shí)就是一個(gè)列表,里邊需要用戶傳入的參數(shù),關(guān)鍵就是要明白這參數(shù)是從程序外部輸入的,而非代碼本身的什么地方,要想看到它的效果就應(yīng)該將程序保存了,從外部來(lái)運(yùn)行程序并給出參數(shù)。

ps:sys.argv[]的用法

一、介紹

1、sys.argv 是獲取運(yùn)行python文件的時(shí)候命令行參數(shù),且以list形式存儲(chǔ)參數(shù)

2、sys.argv[0]表示代碼本身文件路徑

下面我們通過(guò)一個(gè)極簡(jiǎn)單的test.py程序的運(yùn)行結(jié)果來(lái)說(shuō)明它的用法

import sys
a=sys.argv[0]
print(a)

將test.py保存在c盤的根目錄下。

在程序中找到 ‘運(yùn)行’->點(diǎn)擊->輸入"cmd"->回車鍵   進(jìn)入控制臺(tái)命令窗口(如下圖),先輸入cd c:\   (作用是將命令路徑改到c盤根目錄),然后輸入test.py運(yùn)行我們剛剛寫的程序:

這就是0指代碼(即此.py程序)本身的意思。輸出的就是test.py。

如果輸入的是python c:\test.py,輸出就是c:\test.py

然后我們將代碼中0改為1 :

a=sys.argv[1]

保存后,再?gòu)目刂婆_(tái)窗口運(yùn)行,這次我們加上一個(gè)參數(shù),輸入:test.py what

 得到的結(jié)果就是我們輸入的參數(shù)what

二、簡(jiǎn)單的例子

#輸入
$ python ./test.py aa bb cc
import sys
def main(argv): 
    print(argv[0])                  aa      
    print(argv[1])                  bb
    print(argv[1:])                 ['bb', 'cc']
    print(argv[1][1:])              b
  
    print('sys.argv[0]:',sys.argv[0])        #test1.py
    print('sys.argv[1]:',sys.argv[1])        #aa
    print('sys.argv[1:]:',sys.argv[1:])     #['aa', 'bb', 'cc']
  
    print('sys.argv:',sys.argv)                 #['test1.py', 'aa', 'bb', 'cc']
    print('type(sys.argv):',type(sys.argv))     #<class 'list'>
    print('len(sys.argv):',len(sys.argv))       #4 
 
    return 0  
  
if __name__ == '__main__':  
    sys.exit(main(sys.argv[1:]))  #sys.exit(0)正常退出, sys.exit(1)非正常退出

從上面輸出結(jié)果可以看出,

sys.argv[0]是當(dāng)前所執(zhí)行的腳本,并且輸入什么就是什么,輸入test.py就是test.py,輸入./test.py就是./test.py

index 1以后的才是所傳入的參數(shù)。用sys.argv[1:]可以獲取到所有的參數(shù),并且輸出到一個(gè)列表里面。

三、輸入為 --numa=1  --numb=2 形式和  --numa 1  --numb  2 形式

 如果 python test.py --numa=1 --numb=2

則sys.argv[1:] 為 [test.py, --numa=1, --numb=2]

 如果 python test.py --numa 1 --numb 2

則sys.argv[1:] 為 [test.py, --numa, 1, --numb, 2]

#輸入
$ python test.py --numa=1 --numb=2
 
import sys
def main(argv): 
    print(argv[0])                  --numa=1    
    print(argv[1])                  --numb=2
    print(argv[1:])                 ['--numb=2']
    print(argv[1][1:])              -numb=2
  
    print('sys.argv[0]:',sys.argv[0])        #test1.py
    print('sys.argv[1]:',sys.argv[1])        #--numa=1
    print('sys.argv[1:]:',sys.argv[1:])     #['--numa=1', '--numb=2']
  
    print('sys.argv:',sys.argv)                 #['test1.py', '--numa=1', '--numb=2']
    print('type(sys.argv):',type(sys.argv))     #<class 'list'>
    print('len(sys.argv):',len(sys.argv))       #3 
 
    return 0  
  
if __name__ == '__main__':  
    sys.exit(main(sys.argv[1:]))  #sys.exit(0)正常退出, sys.exit(1)非正常退出
 
==============================================================================
 
#輸入
$ python test.py --numa 1 --numb 2
 
import sys
def main(argv): 
    print(argv[0])                  --numa   
    print(argv[1])                  1
    print(argv[1:])                 ['1', '--numb', '2']
    print(argv[1][1:])              
  
    print('sys.argv[0]:',sys.argv[0])        #test1.py
    print('sys.argv[1]:',sys.argv[1])        #--numa
    print('sys.argv[1:]:',sys.argv[1:])     #['--numa', '1', '--numb', '2']
  
    print('sys.argv:',sys.argv)             #['test1.py', '--numa', '1', '--numb', '2']
    print('type(sys.argv):',type(sys.argv))     #<class 'list'>
    print('len(sys.argv):',len(sys.argv))       #5
 
    return 0  
  
if __name__ == '__main__':  
    sys.exit(main(sys.argv[1:]))  #sys.exit(0)正常退出, sys.exit(1)非正常退出

到此這篇關(guān)于一文搞懂關(guān)于 sys.argv 的詳解的文章就介紹到這了,更多相關(guān)sys.argv 是什么內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用python爬取B站千萬(wàn)級(jí)數(shù)據(jù)

    使用python爬取B站千萬(wàn)級(jí)數(shù)據(jù)

    B站我想大家都熟悉吧,其實(shí) B 站的爬蟲網(wǎng)上一搜一大堆。不過(guò)紙上得來(lái)終覺(jué)淺,絕知此事要躬行,我碼故我在。
    2018-06-06
  • Python中的SOLID原則實(shí)例詳解

    Python中的SOLID原則實(shí)例詳解

    SOLID原則是由Robert C. Martin提出的以首字母縮寫命名的編碼準(zhǔn)則,它代表了五種不同的編碼習(xí)慣,下面這篇文章主要給大家介紹了關(guān)于Python中SOLID原則的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • python繪制發(fā)散型柱狀圖+誤差陰影時(shí)間序列圖+雙坐標(biāo)系時(shí)間序列圖+繪制金字塔圖

    python繪制發(fā)散型柱狀圖+誤差陰影時(shí)間序列圖+雙坐標(biāo)系時(shí)間序列圖+繪制金字塔圖

    這篇文章主要介紹了python繪制發(fā)散型柱狀圖+誤差陰影時(shí)間序列圖+雙坐標(biāo)系時(shí)間序列圖+繪制金字塔圖,詳細(xì)的內(nèi)容需要的小伙伴可以參考一下下面文章內(nèi)容
    2022-08-08
  • pytorch 轉(zhuǎn)換矩陣的維數(shù)位置方法

    pytorch 轉(zhuǎn)換矩陣的維數(shù)位置方法

    今天小編就為大家分享一篇pytorch 轉(zhuǎn)換矩陣的維數(shù)位置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python使用tarfile模塊實(shí)現(xiàn)免費(fèi)壓縮解壓

    Python使用tarfile模塊實(shí)現(xiàn)免費(fèi)壓縮解壓

    Python自帶的tarfile模塊可以方便讀取tar歸檔文件,厲害的是可以處理使用gzip和bz2壓縮歸檔文件tar.gz和tar.bz2,這篇文章主要介紹了Python使用tarfile模塊實(shí)現(xiàn)免費(fèi)壓縮解壓,需要的朋友可以參考下
    2024-03-03
  • Python保姆式手把手帶你掌握異常的捕獲和處理

    Python保姆式手把手帶你掌握異常的捕獲和處理

    異常即非正常狀態(tài),在Python中使用異常對(duì)象來(lái)表示異常。若程序在編譯或運(yùn)行過(guò)程中發(fā)生錯(cuò)誤,程序的執(zhí)行過(guò)程就會(huì)發(fā)生改變,拋出異常對(duì)象,程序流進(jìn)入異常處理。如果異常對(duì)象沒(méi)有被處理或捕捉,程序就會(huì)執(zhí)行回溯(Traceback)來(lái)終止程序
    2021-09-09
  • win8.1安裝Python 2.7版環(huán)境圖文詳解

    win8.1安裝Python 2.7版環(huán)境圖文詳解

    在本篇內(nèi)容里小編給大家分享了關(guān)于win8.1安裝Python 2.7版環(huán)境的詳細(xì)步驟和方法,有興趣的朋友們跟著學(xué)習(xí)下。
    2019-07-07
  • Python通過(guò)len函數(shù)返回對(duì)象長(zhǎng)度

    Python通過(guò)len函數(shù)返回對(duì)象長(zhǎng)度

    這篇文章主要介紹了Python通過(guò)len函數(shù)返回對(duì)象長(zhǎng)度,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Python表格處理模塊xlrd在Anaconda中的安裝方法

    Python表格處理模塊xlrd在Anaconda中的安裝方法

    本文介紹在Anaconda環(huán)境下,安裝Python讀取.xls格式表格文件的庫(kù)xlrd的方法,xlrd是一個(gè)用于讀取Excel文件的Python庫(kù),本文介紹了xlrd庫(kù)的一些主要特點(diǎn)和功能,感興趣的朋友一起看看吧
    2024-04-04
  • selenium XPath定位的實(shí)現(xiàn)示例

    selenium XPath定位的實(shí)現(xiàn)示例

    XPath是一種在XML文檔中定位和選擇節(jié)點(diǎn)的語(yǔ)言,通過(guò)路徑表達(dá)式遍歷XML樹,支持節(jié)點(diǎn)選取、字符串匹配、數(shù)值計(jì)算、邏輯運(yùn)算等功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10

最新評(píng)論