Вот что я пытаюсь выполнить sh:
При передаче строки в качестве аргумента вызовите функцию write_text ()
python3 app.py write this text to file
При передаче пунктирного аргумента вызовите другую функцию, в этом случае read_text ()
python3 app.py -r
При передаче аргумента без аргументов выведите справку
python3 app.py
Вот что у меня есть:
parser = argparse.ArgumentParser()
parser.add_argument('text', help="write text to file")
parser.add_argument('-r', '--read', help="read text from file")
args = parser.parse_args()
...
def main():
if args.read:
read_text()
elif args.text:
write_text(args.text)
else:
parser.print_help()
Проблема в том, что когда я звоню просто -r
, он жалуется, что отсутствует команда для text
, потому что text
не необязательный аргумент.
Я пытался создать подкоманды и сделать все подкоманды args, но затем необходимо явно вызвать аргумент text
, например python3 app.py text
.
Возможно, я тоже думаю Тяжело на этом и упускать из виду простое решение. У меня это отлично работало, просто разбирая sys.argv
, но это было не красиво. И встроенная функция помощи также полезна.
Заранее спасибо!
Редактировать:
Вот что у меня сейчас работает
parser = argparse.ArgumentParser()
parser.add_argument('text', nargs='*', help="write text to file")
parser.add_argument('-r', '--read', action='store_true', help="read text from file")
args = parser.parse_args()
...
def main():
if args.read:
read_text()
elif args.text:
text = " ".join(args.text)
write_text(text)
else:
parser.print_help()
Все еще думая, что может быть более чистый способ сделать это ...