下面的脚本打印输出并根据命令行参数打开网页。
#main.py
import os, numpy
import argparse
import webbrowser
new=2
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-i','--input',type=str, help='Choose input')
parser.add_argument('-d','--display',dest='disp',type=str, help='Opens a webpage', default=None)
args = parser.parse_args()
if args.input == 'infile':
print('This is input file')
if args.disp == 'openbrowser':
url = "https://stackoverflow.com/"
webbrowser.open(url,new=new,autoraise=True)
if __name__=='__main__':
main()
如果我使用以下命令:
python3 main.py --input infile --display openbrowser
达到期望的输出。但是,我希望--display
(理想情况下没有任何str
)与--input
一起作为子命令进行解析,而不是作为单独的可选标志参数-d
。标志-display
只在--input
被用作主标志时使用,甚至--display
本身也应该是可选的,而不应该是强制性的。
所以我希望命令行参数看起来像:
python3 main.py --input infile --display
打印This is input file
并在浏览器中打开网页。和
python3 main.py --input infile
只输出This is input file
您正在寻找参数规范上的action='store_true'
属性。https://docs.python.org/3/library/argparse.html行动
parser.add_argument('-d', '--display', dest='disp',
action='store_true', help='Opens a webpage')
#main.py
import os, numpy
import argparse
import webbrowser
new=2
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-i','--input',type=str, help='Choose input')
parser.add_argument('-d','--display',dest='disp', action='store_true', help='Opens a webpage')
args = parser.parse_args()
if args.input == 'infile':
print('This is input file')
if args.disp:
url = "https://stackoverflow.com/"
webbrowser.open(url,new=new,autoraise=True)
if __name__=='__main__':
main()
这应该是你正在寻找的。
为了添加子命令,您可以使用ArgumentParser.add_subparsers
方法,该方法不需要参数,并返回一个对象,可以创建任意多的子命令。
import os, numpy
import argparse
import webbrowser
new=2
def main():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
input_parser = subparsers.add_parser("input")
input_parser.add_argument('filename', help='path to file')
args = parser.parse_args()
input_parser.add_argument(
'-d',
'--display',
dest='disp',
action='stor_true',
help='Opens a webpage'
)
if 'filename' in args:
print('This is input file')
if args.disp:
url = "https://stackoverflow.com/"
webbrowser.open(url,new=new,autoraise=True)
if __name__=='__main__':
main()