[英]How to use python argparse with args other than sys.argv?
我已經瀏覽了所有文檔,似乎沒有辦法做到這一點,但是:
有沒有辦法將 argparse 與任何字符串列表一起使用,而不僅僅是與 sys.argv 一起使用?
這是我的問題:我有一個看起來像這樣的程序:
# This file is program1.py
import argparse
def main(argv):
parser = argparse.ArgumentParser()
# Do some argument parsing
if __name__ == '__main__':
main(sys.argv)
當直接從命令行調用該程序時,這可以正常工作。 但是,我有另一個 python 腳本,它使用不同的命令行參數運行該腳本的批處理版本,我正在使用它:
import program1
arguments = ['arg1', 'arg2', 'arg3']
program1.main(arguments)
我仍然希望能夠解析參數,但 argparse 自動默認使用 sys.argv 而不是我給它的參數。 有沒有辦法傳入參數列表而不是使用 sys.argv?
您可以將字符串列表傳遞給parse_args
:
parser.parse_args(['--foo', 'FOO'])
只需將腳本更改為默認為sys.argv[1:]
並解析省略第一個參數(這是調用命令的名稱)
import argparse,sys
def main(argv=sys.argv[1:]):
parser = argparse.ArgumentParser()
# Do some argument parsing
args = parser.parse_args(argv)
if __name__ == '__main__':
main()
或者,如果您不能省略第一個參數:
import argparse,sys
def main(args=None):
# if None passed, uses sys.argv[1:], else use custom args
parser = argparse.ArgumentParser()
parser.add_argument("--level", type=int)
args = parser.parse_args(args)
# Do some argument parsing
if __name__ == '__main__':
main()
上一篇:如果你不能改變被調用的程序,你仍然可以做一些事情
假設您無法更改的程序名為argtest.py
(我添加了對打印參數的調用)
然后只需更改argtest.sys
模塊的本地argv
值:
import argtest
argtest.sys.argv=["dummy","foo","bar"]
argtest.main()
輸出:
['dummy', 'foo', 'bar']
Python argparse 現在有一個參數nargs
用於add_argument
( https://docs.python/3/library/argparse.html )。
它允許我們為命名參數擁有任意數量的參數(這里是alist
)
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--alist", nargs="*")
args = parser.parse_args()
print(args.alist)
--alist
所有命令行值都添加到列表中。
示例:
$ python3 argparse-01.py --alist fred barney pebbles "bamm bamm"
['fred', 'barney', 'pebbles', 'bamm bamm']
如您所見,允許引用參數,但除非您需要保護空格,否則不是必需的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.