如何删除终端中的给定参数并在参数解析中添加我自己的参数



我想创建一个从我的python程序中获取的输入目录,并将其作为参数提供给同一代码中的argParser。

我基本上只是想创建一个用户输入和运行的文件名目录,以便我可以将他的图像数据集制作到该指定文件夹中。

from imutils.video import VideoStream
import argparse
import imutils
import time
import cv2
import os
intr=input("Hello Intruder enter Your name")
print(intr)
dirpath=os.path.join('./dataset',intr)
os.mkdir(dirpath)
ap = argparse.ArgumentParser()
ap.add_argument("-c", "--cascade", required=True,
help = "path to where the face cascade resides")
ap.add_argument("-o", "--output","dataset/unknown", required=True,
help="path to output directory")
args = vars(ap.parse_args())
detector = cv2.CascadeClassifier(args["cascade"])

我得到的:

(cv) ASKV:opencv-face-recognition askvyas$ python build_face_dataset.py --cascade haarcascade_frontalface_default.xml --output dataset/unknown
Hello Intruder enter Your namekiu
kiu
Traceback (most recent call last):
File "build_face_dataset.py", line 18, in <module>
help="path to output directory")
File "/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/argparse.py", line 1320, in add_argument
kwargs = self._get_optional_kwargs(*args, **kwargs)
File "/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/argparse.py", line 1451, in _get_optional_kwargs
raise ValueError(msg % args)
ValueError: invalid option string 'dataset/unknown': must start with a character '-'

这是我这样做的方式: 构建一个类,然后如果该文件是从 bash python myfile.py 调用的,请使用 argparser 更新该类。如果从另一个文件调用该命令,则会跳过 argparse 部分。

示例(警告,我在没有运行它的情况下键入了它,因此它可能包含拼写错误,但本质上它可以工作(

class ARGS:
def __init__(self, some_str_arg="this", some_float_arg=0.7, some_int_arg=12):
self.some_str_arg = some_str_arg
self.some_float_arg = some_float_arg
self.some_int_arg = some_int_arg
def set_from_parser(self):
# here you could get fancier and add arguments parsing the class dict, but for simplicity I duplicate tehm
import argparse
parser = argparse.ArgumentParser(description="Some Parser")
parse.add_argument('--some_str_arg', default=self.some_str_arg, type=str, help='my string arg')
parse.add_argument('--some_float_arg', default=self.some_float_arg, type=float, help='my foat arg')
parse.add_argument('--some_int_arg', default=self.some_int_arg, type=int, help='my string arg')
args = parser.parse_args()
for _a in args.__dict__:
self.__dict__[_a] = args.__dict__[_a]
def some_fun(A=None, **kwargs):
# this you can call from python as
# >>> some_fun(some_str_arg="cogito ergo sum", some_float_arg=1.618, some_int_arg=42)
# or from bash as
# $ python myfun.py --some_str_arg really --some_float_arg 3.14 --some_int_arg 0
if A is None:
A = ARGS()
for kw in kwargs:
if kw in A.__dict__:
A.__dict__[kw] = kwargs[kw]
... do something
if __name__ == "__main__":
A = ARGS()
A.set_from_parser()
some_fun(A)

您应该将--output参数设置为"不需要",并将dirpath设置为默认值:

ap.add_argument("-o", "--output", default=dirpath, help="path to output directory")

相关内容

最新更新