Argparse принимает int и строку?

Новичок в этом, поэтому, пожалуйста, извините за невежество. Можно ли (если да, то как это сделать) принять от пользователя команду, содержащую и цифры, и буквы? Я хочу получить 3 аргумента от пользователя, когда он вводит что-то вроде "./test -selectport af15" (1-й аргумент всегда одна буква, 2-й всегда одна буква, 3-й аргумент будет числом от 1 до 3 цифр (1-999) , Любая помощь приветствуется.Спасибо.

Список командной строки содержит строки, и по умолчанию argparse просто присваивает эти строки атрибутам args. Так что вы получите args.selectport = 'af15'. Вы можете разделить эту строку любым удобным для вас способом - после синтаксического анализа.

hpaulj 27.07.2019 02:51
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
1
1 948
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, что-то вроде этого будет делать:

import sys

if __name__ == "__main__":
    user_input = sys.argv[2]
    first_letter = user_input[0]
    second_letter = user_input[1]
    third = user_input[2:]

    print(first_letter)
    print(second_letter)
    print(third)

Выход:

python test.py -selectport af15
a
f
15

Конечно, вам нужно обрабатывать особые случаи, возможные ошибки пользовательского ввода и т. д. самостоятельно. Здесь я предполагаю, что ввод всегда дается правильно. Начните отсюда и уточните.

Ответ принят как подходящий

Я думаю, что вас может сбить с толку то, как документы argparse говорят вам рассматривать агрумент как тип. Если вы новичок в этом, это может показаться более сложным, чем есть на самом деле. Другой ответ охватывает как, но явно ответить на ваш вопрос:

Обработайте все это как строку в argparse, проанализируйте три части, которые вы хотите, а затем сделайте последнюю часть самостоятельно.

Должно заставить вас идти:

#!/usr/bin/env python3

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('-selectport', help='Will parse this string into a few items')

args = parser.parse_args()

first = args.selectport[0]
second = args.selectport[1]
last = int(args.selectport[2:])

print(f"{first} {second} {last}")

Другие вопросы по теме