Python argparse 子命令

前面

功能比較多的命令端程序常常將功能分解到不同子命令中,如在Python中常見的pip install、pip uninstall等。當(dāng)程序比較復(fù)雜且不同功能都需要不同參數(shù)時(shí),子命令是一個(gè)不錯(cuò)的方式。

正文

argparse 使用add_subparsers()方法去創(chuàng)建子命令。代碼:

import argparse

parser = argparse.ArgumentParser(prog='PROG')

subparsers = parser.add_subparsers(help='sub-command help')
#添加子命令 add
parser_a = subparsers.add_parser('add', help='add help')
parser_a.add_argument('-x', type=int, help='x value')
parser_a.add_argument('-y', type=int, help='y value')
#添加子命令 sub
parser_s = subparsers.add_parser('sub', help='sub help')
parser_s.add_argument('-x', type=int, help='x value')
parser_s.add_argument('-y', type=int, help='y value')

args = parser.parse_args()

print('x', args.x, 'y', yargs.y)

終端運(yùn)行程序

$python subc.py add -x 1 -y 2
x 1 y 2
$python subc.py sub -x 1 -y 2
x 1 y 2

但是是沒辦法判斷你使用的是哪個(gè)子命令的。所幸的是argparse提供了一個(gè)一個(gè)方法set_defaults(),可以將子命令綁定特定的函數(shù)。

import argparse

def add(args):
     r = args.x + args
     print('x + y = ', r)

def sub(args):
     r = args.x - args
     print('x - y = ', r)

parser = argparse.ArgumentParser(prog='PROG')
subparsers = parser.add_subparsers(help='sub-command help')
#添加子命令 add
parser_a = subparsers.add_parser('add', help='add help')
parser_a.add_argument('-x', type=int, help='x value')
parser_a.add_argument('-y', type=int, help='y value')
#設(shè)置默認(rèn)函數(shù)
parser_a.set_defaults(func=add)
#添加子命令 sub
parser_s = subparsers.add_parser('sub', help='sub help')
parser_s.add_argument('-x', type=int, help='x value')
parser_s.add_argument('-y', type=int, help='y value')
#設(shè)置默認(rèn)函數(shù)
parser_s.set_defaults(func=sub)
args = parser.parse_args()
#執(zhí)行函數(shù)功能
args.func(args)

終端運(yùn)行程序

$python subc.py add -x 1 -y 2
x + y =  3
$python subc.py sub -x 1 -y 2
x - y =  -1

argparse會將子命令會運(yùn)行相應(yīng)的函數(shù)執(zhí)行子命令綁定函數(shù)功能

其它

但是如果你嘗試運(yùn)行多個(gè)子命令是會報(bào)錯(cuò)。默認(rèn)不支持平行運(yùn)行多個(gè)子命令的。不過可以給子命令在添加子命令。關(guān)于運(yùn)行多個(gè)子命令的解決辦法感興趣的可以去stackoverflow查看這個(gè)問題下的答案:
How to parse multiple nested sub-commands using python argparse?

參考:

https://docs.python.org/3/library/argparse.html#sub-commands

原文:Python argparse 子命令

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 6,335評論 0 10
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    小邁克閱讀 3,124評論 1 3
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,715評論 0 5
  • 原文鏈接 《Python數(shù)據(jù)分析》(Python for Data Analysis, 2nd Edition)第...
    李紹俊閱讀 8,768評論 0 5
  • 一座山嶺歷經(jīng)千年修行,終于化身為妖。千年前,山從佛祖手中降世,鎮(zhèn)壓妖猴,風(fēng)吹雨打,春去秋來。然妖猴非凡,汲天地靈氣...
    寧啊呢閱讀 185評論 0 0

友情鏈接更多精彩內(nèi)容