我想创建一个可以由命令行和其他模块使用的Python模块。 像那样:
python3 Capacity.py arg1 arg2 arg3
or
>>> capacity.execByString("arg1 arg2 arg3")
我创建了一个类(通过一些研究)在代码中获得argparse的结果:
class ArgumentParserError(Exception): pass
class Parseur(ArgumentParser):
def error(self, msg):
raise ArgumentParserError(msg)
def analyze(self, args):
if type(args) is not list:
args = args.split() # To work with a String
try:
result = self.parse_args(args)
return True, result
# Returns True and the namespace if OK
except ArgumentParserError as err:
return False, err.args[0]
# Returns False and the error message if not OK
我这样用:
class Capacity():
def __init__(self):
self.parser = Parseur()
# Config the parser
def execByArguments(*args):
# Do the job
def execByString(command):
isOK, result = self.parser.analyze(command)
if isOk:
# Launch execByArguments with the rights args in result
else:
# Print error message
print(result)
def execFromCommandLine():
args = self.parser.parse_args()
# Launch execByArguments with the rights args
if __name__ == "__main__":
execFromCommandLine()
但是有两个主要问题,当然还有一些我还没有发现:
我确信让另一个Parseur课程变得无用/不好,并且有一个解决方法。 通过子进程启动模块也不是一个好主意:我想在这种情况下获取返回的对象。 你能帮我找一个很酷的方式去做我想要的吗? 谢谢。
PS:在线公式上写代码真是太痛苦了^^。
答案 0 :(得分:0)
你并不遥远。我会这样做:
class Capacity():
def __init__(self, argv):
# take over and store arguments (or process further parsing)
self.parser = Parseur()
isOk, result = self.parser.analyze(argv)
def argInputValidation(argv):
#checking the command line arguments given by user
#and returning valid argv, otherwise exit program
#with an error message.
return argv
if __name__ == "__main__":
obj = Capacity(argInputValidation(sys.argv[1:]))