日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python 命令行传参

發(fā)布時(shí)間:2025/3/8 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 命令行传参 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Python 命令行傳參

說到 python 命令行傳參,可能大部分人的第一反應(yīng)就是用 argparse。的確,argparse 在我們需要指定多個(gè)預(yù)設(shè)的參數(shù)(如深度學(xué)習(xí)中指定模型的超參數(shù)等)時(shí),是非常有用的。但是如果有時(shí)我們只需要一個(gè)參數(shù),那么再解析一整套 argparse 稍顯笨重。本文除了介紹 argparse 之外,也會(huì)介紹一些簡(jiǎn)單輕便的命令行傳參方法。

sys

我們?cè)趯W(xué)習(xí) C/C++ 時(shí)知道主函數(shù) main 需要傳入三個(gè)參數(shù):

int main(int argc, char* argv[], char* env[]) {}

其中第三個(gè)參數(shù)是環(huán)境變量,大部分時(shí)候我們不寫在程序里,即一般有:

int main(int argc, char* argv[]) {}

關(guān)于這幾個(gè)參數(shù)包括環(huán)境變量參數(shù)更深入的解釋可參考:Linux中 C++ main函數(shù)參數(shù)argc和argv含義及用法、12 [虛擬化] 進(jìn)程抽象;fork,execve,exit

簡(jiǎn)單來說,這里的 argc 和 argv 分別是傳入?yún)?shù)的個(gè)數(shù),和傳入的參數(shù)列表。這里傳入的參數(shù),就是可以在命令行中傳遞的。

在 python 中,我們當(dāng)然同樣可以用這種方式來傳遞命令行參數(shù),這里我們需要借助內(nèi)置的 sys 庫。

直接上代碼:

import sysprint(f'參數(shù)個(gè)數(shù):{len(sys.argv)}') print(f'參數(shù)列表:{str(sys.argv)}')

然后我們?cè)诿钚羞\(yùn)行,并傳入幾個(gè)參數(shù):

python test.py arg1 arg2

輸出為:

參數(shù)個(gè)數(shù):3 參數(shù)列表:['test.py', 'arg1', 'arg2']

注意這里沒有所謂的 sys.argc,而是通過取參數(shù)列表的長度來獲得參數(shù)的個(gè)數(shù) len(sys.argv)。

這種方式獲取幾個(gè)命令行參數(shù)有時(shí)是非常方便的。比如有時(shí)我們寫了一個(gè)腳本,要將目標(biāo)檢測(cè)數(shù)據(jù)集中某一張圖像的檢測(cè)框畫出來查看,但是想要每次查看不同的圖像。就可以通過這種方式在運(yùn)行腳本時(shí)通過命令行傳參。

# draw_box.py import sysdef draw_box(image_name):# ...passif __name__ == "__main__":draw_box(sys.argv[1])

這樣在運(yùn)行時(shí)直接在命令行中:

python draw_box.py 12345.jpg

getopt 模塊

getopt模塊是專門處理命令行參數(shù)的模塊,用于獲取命令行選項(xiàng)和參數(shù),也就是sys.argv。命令行選項(xiàng)使得程序的參數(shù)更加靈活。支持短選項(xiàng)模式 - 和長選項(xiàng)模式

該模塊提供了兩個(gè)方法及一個(gè)異常處理來解析命令行參數(shù)。

getopt.getopt 方法

getopt.getopt 方法用于解析命令行參數(shù)列表,語法格式如下:

getopt.getopt(args, options[, long_options])

方法參數(shù)說明:

  • args: 要解析的命令行參數(shù)列表。
  • options : 以字符串的格式定義,options 后的冒號(hào) : 表示如果設(shè)置該選項(xiàng),必須有附加的參數(shù),否則就不附加參數(shù)。
  • long_options : 以列表的格式定義,long_options 后的等號(hào) = 表示該選項(xiàng)必須有附加的參數(shù),不帶等號(hào)表示該選項(xiàng)不附加參數(shù)。
  • 該方法返回值由兩個(gè)元素組成: 第一個(gè)是 (option, value) 元組的列表。 第二個(gè)是參數(shù)列表,包含那些沒有 - 的參數(shù)。

另外一個(gè)方法是 getopt.gnu_getopt,這里不多做介紹。

Exception getopt.GetoptError

在沒有找到參數(shù)列表,或選項(xiàng)的需要的參數(shù)為空時(shí)會(huì)觸發(fā)該異常。

異常的參數(shù)是一個(gè)字符串,表示錯(cuò)誤的原因。屬性 msgopt 為相關(guān)選項(xiàng)的錯(cuò)誤信息。

argparse

最后是大家最熟悉的 argparse,由于它功能強(qiáng)大且復(fù)雜,這里就介紹幾個(gè)最常用的方式。

# test_argparse.py import argparseparser.add_argument('--representation_size', type=int, default=768) parser.add_argument('--batchSize', type=int, default=32, help='batch size') parser.add_argument('--epochs', type=int, default=100, help='epochs') parser.add_argument('--num_workers', type=int, default=20, help='num workers') parser.add_argument('--tbx', default='debug', help='the name of dir to store data for tensorboard') parser.add_argument('--gpu_id', default='0', help='gpu id') parser.add_argument('--load_path', type=str, default='') parser.add_argument('--lr', type=float, default=5e-3, help='learning rate') parser.add_argument('--lr_decay', type=float, default=1., help='gamma of learning rate decay') parser.add_argument('--p', type=float, default=0.75, help='p of drop out')parser.add_argument('--freeze-features', action="store_true")args = parser.parse_args() print(args.accumulate(args.integers))

在導(dǎo)入 argparse 之后分以下幾步:

  • 先建立一個(gè) parser 對(duì)象
  • 然后通過 add_argument 加入所需要的參數(shù)
  • 最后通過調(diào)用 parser 對(duì)象的 parse_args 方法來將參數(shù)解析,并賦值給 args
  • 之后就可使用添加的參數(shù)(如 args.integer)了。

    在命令行傳參時(shí)需:

    python test_argparse.py --batchSize 64 --num_workers 12 --freeze-features

    若未傳參,則按照設(shè)置的 default 賦值。

    Ref:

    https://www.runoob.com/python/python-command-line-arguments.html

    https://docs.python.org/zh-cn/3/library/argparse.html

    總結(jié)

    以上是生活随笔為你收集整理的Python 命令行传参的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。