[英]Python 2.7. Parse input parameters
一天中的好時光! 首先,讓我說我是 Python 世界的新手。 我在解析輸入參數時遇到問題。 目前我正在使用 Python 2.7和名為argparse
模塊。 我正在嘗試設計能夠解析簡單輸入參數的簡單應用程序。 這是一個簡短的例子:
my_app.py 同步 --force
第二個例子:
my_app.py 補丁 --branch
我看到為此我可以使用add_argument
,它可以與位置和可選參數一起使用。 就像在我的情況下,我想要很少的位置(但同時是可選的)和一些可選的參數。 為此,我設計了小腳本
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='My App')
parser.add_argument('sync', type=bool, const=True, nargs='?')
parser.add_argument('-f', '--force', dest='sync_force', type=bool, const=True, nargs='?')
parser.add_argument('-b', '--branch', type=str, const=True, nargs='?')
parser.add_argument('-u', '--url', type=str, const=True, nargs='?')
parser.add_argument('patch', type=bool, const=True, nargs='?')
parser.add_argument('revert', type=bool, const=True, nargs='?')
parser.add_argument('verify', type=bool, const=True, nargs='?')
values = parser.parse_args()
if values.revert:
handler.revert()
else:
parser.print_help()
我看到我可以使用nargs='?'
將位置參數指定為可選,但是每次我調用我的腳本時,它都會顯示我將 ' sync ' 作為輸入參數,即使我指定了 ' patch '。 所以,我認為它只顯示了第一個添加的元素。 你能告訴我出了什么問題,哪里出了問題嗎?
更新:我試圖實現一種情況,即我將能夠同時只有一個位置參數(並且至少有一個,但帶有任何其他可選參數)。 例如
my_app.py 同步
my_app.py 路徑
my_app.py 驗證 --force
my_app.pyrevert --branch
和:
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='My App')
parser.add_argument('cmd', choices=['sync','patch', 'revert','verify'])
parser.add_argument('-f', '--force', action='store_true')
parser.add_argument('-b', '--branch')
parser.add_argument('-u', '--url')
args = parser.parse_args()
print(args)
if args.cmd in ['revert']:
print('handler.revert()')
else:
parser.print_help()
測試
1243:~/mypy$ python stack60327766.py
usage: stack60327766.py [-h] [-f] [-b BRANCH] [-u URL]
{sync,patch,revert,verify}
stack60327766.py: error: too few arguments
1244:~/mypy$ python stack60327766.py revert
Namespace(branch=None, cmd='revert', force=False, url=None)
handler.revert()
1244:~/mypy$ python stack60327766.py revert -f -b foobar -u aurl
Namespace(branch='foobar', cmd='revert', force=True, url='aurl')
handler.revert()
1244:~/mypy$ python stack60327766.py verify-f -b foobar -u aurl
usage: stack60327766.py [-h] [-f] [-b BRANCH] [-u URL]
{sync,patch,revert,verify}
stack60327766.py: error: argument cmd: invalid choice: 'verify-f' (choose from 'sync', 'patch', 'revert', 'verify')
1245:~/mypy$ python stack60327766.py verify -f -b foobar -u aurl
Namespace(branch='foobar', cmd='verify', force=True, url='aurl')
usage: stack60327766.py [-h] [-f] [-b BRANCH] [-u URL]
{sync,patch,revert,verify}
My App
positional arguments:
{sync,patch,revert,verify}
optional arguments:
-h, --help show this help message and exit
-f, --force
-b BRANCH, --branch BRANCH
-u URL, --url URL
改編自上述鏈接的文檔,
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
subparsers = parser.add_subparsers()
sync_parser = subparsers.add_parser('sync')
patch_parser = subparsers.add_parser('patch')
revert_parser = subparsers.add_parser('revert')
verify_parser = subparsers.add_parser('verify')
等可能是你正在尋找的。
除此之外,我只能推薦Click庫以獲得更流暢的 CLI 界面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.