我一直试图执行我的python脚本与一些参数传递。我希望它是这样的:
python script.py filepath
还要支持这个
python script.py filepath1 filepath2
我的实现是:
parser = argparse.ArgumentParser()
mand = parser.add_argument_group("Mandatory arguments")
mand.add_argument("path1", help = "path1")
opt = parser.add_argument_group("Optional arguments")
opt.add_argument("path2", help = "path2")
args = parser.parse_args()
似乎需要两个参数。谁有什么建议,什么是正确的方式来做到这一点?我的一个想法是做两个论证组;一个有路径1,另一个有两个路径,但它仍然请求了两个路径。
谢谢大家!
注:Python 2.7
使用nargs="?"
(with argparse
)
import argparse
parser = argparse.ArgumentParser()
mand = parser.add_argument_group("Mandatory arguments")
mand.add_argument("path1", help = "path1")
opt = parser.add_argument_group("Optional arguments")
opt.add_argument("path2", help = "path2", nargs="?")
args = parser.parse_args()
print args
参见用法string:
$ python argscript.py
usage: argscript.py [-h] path1 [path2]
argscript.py: error: too few arguments
或与-h
:
$ python argscript.py -h
usage: argscript.py [-h] path1 [path2]
optional arguments:
-h, --help show this help message and exit
Mandatory arguments:
path1 path1
Optional arguments:
path2 path2
并尝试只使用一个位置参数:
$ python argscript.py alfa
Namespace(path1='alfa', path2=None)
和两个:
$ python argscript.py alfa beta
Namespace(path1='alfa', path2='beta')
对不起,我的回答有点离题。我更喜欢用docopt
,所以如果你感兴趣的话。
使用docopt
先安装docopt:
$ pip install docopt
和脚本:
"""script.py
Usage:
script.py <fname>...
"""
if __name__ == "__main__":
from docopt import docopt
args = docopt(__doc__)
print args
你可以这样使用:
请求使用脚本:
$ python script.py
Usage:
script.py <fname>...
用一个文件名调用:
$ python script.py alfa
{'<fname>': ['alfa']}
与两个名称连用:
$ python script.py alfa beta
{'<fname>': ['alfa', 'beta']}
使用不同的用法说明:
允许有一个或两个文件名,但不能有三个或更多:
"""script.py
Usage:
script.py <input> [<output>]
"""
if __name__ == "__main__":
from docopt import docopt
args = docopt(__doc__)
print args