Рубрики
Без рубрики

Аргументы командной строки Python: часть 3

Поскольку мы получаем более подробную информацию с аргументами командной строки Python, мы должны помнить общий дом … Теги с учебником, Python, производительностью.

Когда мы получаем более подробную информацию с аргументами командной строки Python, мы должны помнить общий доступ домашнего хозяйства в семействе командной строки; Гестоп Отказ

Видите, до того, как у нас было фантазии argparse. У нас был этот швейцарский армейский нож пакета. Если вы являетесь «программистом для Ranging-Rish», бьюсь об этом звонил в колокол. В качестве заметного разницы между двумя, определенно задействована кода. Есть еще несколько различий, которые придут к свету, как мы исследуем ту же программу раньше. Вот оно. Как небольшая задача, мы собираемся покинуть раздел проекта, просто чтобы увидеть, как далеко мы можем получить без лишнего подталкивания. Помните Квадратная программа ?

import getopt
import sys
from math import sqrt

"""
get the square but get the square root in case the argument 'root' is provided
"""


def usage():
    """
    Show help for the CLI program
    """
    print("python advanced_square.py --number  \n OR\n")
    print("python advanced_square.py -n \n")
    print("To get the square root: python advanced_square.py -n  -r")
    print("Example: get the square\n\tpython advanced_square.py -n 5")



def main():

    try:
        option, arguments = getopt.getopt(sys.argv[1:],"hn:r",["help",,"root"])
    except getopt.GetoptError as error:
        print(error)
        sys.exit()

    # initialize variables for for loop
    number = None
    root_number = False

    for opt, variable in option:
        if opt in ("-h", "--help"):
            usage()
        elif opt in ("-n", "--number"):
            number = int(variable)
        elif opt in ('-r','--root'):
            root_number = True
        else:
            usage()
            sys.exit()

    if root_number:
        print(f"The square root of {number} = {sqrt(number)}")
    else:
        print(f"The square of {number} = {number* number} ")



if __name__ == '__main__':
    main()

Что эта программа проста. Получите площадь числа, анализируемого как командную строку или получите его root, если --root или -R проанализирован.

Запустить его.

# get the square of 5
python advanced_square.py -n 5

# get the square root of 5
python advanced_square.py -n 5 --root  

Давайте сломаем это вниз. В отличие от внука argparse который просто знает, как отображать полезные сообщения, в Гестропт Мы не получаем это прямо из коробки. Так работает Python Advanced_square.py . просто даст пользователю экран ошибки, как так

Traceback (most recent call last):
  File "advanced_square.py", line 48, in 
    main()
  File "advanced_square.py", line 43, in main
    print(f"The square of {number} = {number* number} ")
TypeError: unsupported operand type(s) for *: 'NoneType' and 'NoneType'

Мы должны указать, как мы хотим, чтобы этот прогон. Вот где наша пользовательская функция Использование приходит в. Рассказывать пользователя, «Эй, знай что? Ты испортил

Посмотрите на эту строку здесь:

option, arguments = getopt.getopt(sys.argv[1:],"hn:r",["help",,"root"])

Что getopt.getopt () Принимает ли три аргумента,

#Accept a list of command-line arguments excluding the program #name itself.
sys.argv[1:]

Принять коротко опции. Причина, почему в вашем Unix-подобном терминале вы можете сказать ЛС -А или ls --al l, чтобы перечислить содержимое каталога, включая скрытые файлы. - был бы краткий вариант в этом случае

"hn:r"

Обратите внимание, как мы покажем короткие варианты. Наша программа, Advanced_square.py принимает три коротких варианта, а именно H За помощью, n по номеру, квадрат которого или квадратный корень мы хотим и R Чтобы указать, действительно ли это корень номера, который нам нужен.

Смотрите это N: ? Эта маленькая толстая кишка после письма n Указывает, что после написания N, нам нужен фактический номер, анализируемый. Следовательно, -На 5 или -Н 29. и так далее. Лонг вариант альтернативы, как вы могли бы заметить, было бы номер = Отказ Мы добавляем одинаковое зрение, чтобы показать, что эта опция нуждается в аргументе, чтобы следовать за ним, в отличие от своего аналоги root и помощь

Мы следим за этим с R Указать, что пользователь может просто написать -Н 5 -р Что означало бы, чтобы получить корень из 5. Длинные альтернативы этой программе будут:

python advanced_square.py --number 5 --root  

Заказ не имеет значения. Будь то - Нет. идет после --root или нет для вас. Гестоп будет знать, что делать. Разве это не круто?

Просто обратите внимание, однако, что если вы укажете n Чтобы быть способным получить номер, то это то, что должно следовать за ним. Так что вы не можете сделать это

# wrong move
python advanced_square.py --number  --root 5 

В целом;

getopt.getopt(sys.argv[1:],"hn:r",["help",,"root"])

Возвращение вышеперечисленного мы получаем два предмета. Первый, который мы называем «варианты» выглядят так [(-N ',' 5 ')]]] Пока вторые, названные «аргументы» просто это [] , пустой список! Это странно. Можно сказать.

Переменные аргументов считают, какие дополнительные аргументы были проанализированы к программе. Так что, если пользователь делает:

python advanced_square.py -n 7  9

Опции будут выглядеть как: [('-n', '5')] в то время как аргументы будут выглядеть как ['9'] . Это будет держать всех этих странный экстрас Вы можете пройти. Так что, если мы случайно решили использовать:

python advanced_square.py -n 7  -h

Варианты будет выглядеть так [('-N', '7'), ('-h', '')] , список кортежей. Смотрите свет в конце туннеля?

Давайте перейдем к следующей строке.

getopt.GetoptError as error:

Обратите внимание, как мы получаем ошибку. Таким образом, все, что нет в требуемой спецификации аргумента командной строки, поймана как ошибка. Например, вы используете Python Advanced_square.py --animal 5 Отказ В таком случае мы хотим отобразить сообщение об ошибке и изящно выйти из программы. Короче, используя фразу животное Нигде не определено в нашей программе!

Поскольку наше основное внимание уделяется аргументам, на самом деле потребности программы, мы отказываемся от использования на Аргументы (Дополнительно) Переменная и петля через список Варианты Отказ Мы говорим, если ('-n', '7') в этом случае n присутствует и имеет значение, возьмите его и сделайте «1 2 3», если («H», '') Какой присутствует, позвоните этой функции – Помоги мне! .

Мы преобразуем значение пунктного элемента, нашего «5» до целого числа, как Гестоп предполагает, что все идет Строка Отказ Итак, мы меняем вход в int и назначьте его переменной под названием «Номер» Номер (переменная)

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

Эта прогулка по коду, как обычно, на Гринсенды Отказ До следующего раза, хотя Adios!

Оригинал: “https://dev.to/marvinkweyu/python-command-line-arguments-part-3-2500”