python-3.x - 如何在终端中删除给定的args并在argparse中添加自己的args

标签 python-3.x opencv argparse opencv3.0

我想创建一个取自我的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)

关于python-3.x - 如何在终端中删除给定的args并在argparse中添加自己的args,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57715197/

相关文章:

python - python中奇怪的作用域行为

c++ - 在 64 位 mac 上编译 OpenCV 代码

python - 如何在 Pythonbrew 中使用带空格的位置参数?

python - 插件模式+子命令

python - 位置参数之前的 argparse 可选参数

python - 获取真实值的长度

python 乌龟 Canvas 滚动

python-3.x - ModuleNotFoundError : No module named 'py4j'

python - 在 opencv python 中将边界应用于我的图像

opencv - 了解OpenCV层次结构