我一直试图通过传递一些参数来执行我的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()
似乎要求两个论点。有没有人有任何关于这样做的正确方法的建议?我的一个想法是做两个论点组;一个是path1而另一个是两个路径,但它仍然要求两个。
谢谢你们和女孩们!
P.S。 Python 2.7
答案 0 :(得分:3)
nargs="?"
(使用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
参见用法字符串:
$ 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')
答案 1 :(得分:1)
对不起有点主题回答。我更喜欢使用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