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






Я думаю, что-то вроде этого будет делать:
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}")
Список командной строки содержит строки, и по умолчанию
argparseпросто присваивает эти строки атрибутамargs. Так что вы получитеargs.selectport = 'af15'. Вы можете разделить эту строку любым удобным для вас способом - после синтаксического анализа.