Я хочу создать модуль 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()
Но есть 2 основные проблемы, и, конечно, некоторые из них я еще не обнаружил:
- аргументы не анализируются правильно (например, удваивает кавычки), так как функция split имеет "пробелы"разделитель
- с помощью флага -h в любом случае закройте программу
Я убежден, что создание этого другого класса Parseur бесполезно / не хорошо, и есть обходной путь.Запуск модуля через подпроцесс также не является хорошей идеей: я хочу получить возвращенный объект в этом случае.Можете ли вы помочь мне найти крутой способ сделать то, что я хочу, пожалуйста?Спасибо уже.
PS: Писать код в онлайн-формуляре - такая боль ^^.