Я создаю клиент, используя Python3. Мне нужно проанализировать аргументы, отправленные пользователем.
Скажем, у меня есть скрипт на Python client.py
со следующим кодом
def upload_file(path,compress=False):
print(path)
print("uploading")
def download_file(name):
print(name)
print("downloading")
Если скрипт вызывается с аргументом 'upload_file', то должна вызываться функция upload_file
и так далее...
Вот различные возможные способы вызова скрипта.
python client.py upload_file -path /home/user/sample.gz
python client.py upload_file -path /home/user/sample_folder --compress=True
python client download_file -name sample.gz
Как создать синтаксический анализатор с помощью argparse
, который вызывает соответствующую функцию и выдает правильное сообщение об ошибке при передаче недопустимого аргумента?
Похоже, вы ищете ArgumentParser.add_subparsers
. Прочитайте документацию об этом и не стесняйтесь задавать более точные вопросы, если вы застряли.
Раздел подкоманд в документации довольно хорошо описывает ваш случай, docs.python.org/3/library/argparse.html#подкоманды
Вот пример того, как использовать парсер с вашим примером:
import os
import argparse
def upload_file(path,compress=False):
print(path)
print("uploading")
def download_file(name):
print(name)
print("downloading")
def main(argv):
action = argv.action_to_take
file = argv.file
if action == 'download':
download_file(file)
elif action == 'upload':
upload_file(file)
else:
print('Action not recognised')
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Action to take')
parser.add_argument('action_to_take', help='input file path on HDFS')
parser.add_argument('file', help='file to download or upload')
args = parser.parse_args()
main(args)
В чем была проблема, когда вы пытались это сделать?