gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 17:28:12 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com