Python3 Аргументы командной строки

Python3 基础语法Базовый синтаксис Python3

Python предоставляет модулиgetopt иsys для получения аргументов командной строки.

$ python test.py arg1 arg2 arg3

В Python вы также можете использоватьsysи егоsys.argvдля получения аргументов командной строки:

  • sys.argv— это список аргументов командной строки.

  • len(sys.argv)Подсчитывает количество аргументов командной строки.

Примечание:sys.argv[0]представляет имя скрипта.

Примеры

Код файла test.py выглядит следующим образом:

Примеры

#!/usr/bin/python3

import sys

print ('Количество аргументов:', len(sys.argv), ' аргументов.')
print ('Список аргументов:', str(sys.argv))
print ('Имя скрипта:', str(sys.argv[0]))

При выполнении приведённого выше кода вывод будет следующим:

$ python3 test.py arg1 arg2 arg3
参数个数为: 4 个参数。
参数列表: ['test.py', 'arg1', 'arg2', 'arg3']
脚本名: test.py

Модуль getopt

Модуль getopt — это модуль, специально предназначенный для обработки аргументов командной строки, используемый для получения опций и аргументов командной строки, то естьsys.argv. Опции командной строки делают аргументы программы более гибкими. Он поддерживает режим коротких опций-и режим длинных опций--。

Модуль предоставляет два метода и обработчик исключений для разбора аргументов командной строки.

Метод getopt.getopt

Метод getopt.getopt используется для разбора списка аргументов командной строки. Формат синтаксиса следующий:

getopt.getopt(args, options[, long_options])

Описание параметров метода:

  • args: Список аргументов командной строки, которые нужно разобрать.

  • options: Определяется в строковом формате. Двоеточие послеoptionscolon after:указывает, что опция должна иметь дополнительный аргумент; отсутствие двоеточия означает, что опция не принимает аргумент.

  • long_options: Определяется в формате списка. Знак равенства послеlong_optionsequal sign after=указывает, что если опция задана, она должна иметь дополнительный аргумент; в противном случае аргумент не присоединяется.

Возвращаемое значение этого метода состоит из двух элементов: первый — это(option, value)список кортежей. Второй — список аргументов, содержащий те, что без-или--опций.

Далее мы определяем функцию site() и затем вводим имя сайтаnameи URL через командную строку,urlможно использовать сокращенияnиu:

Примеры

import sys
import getopt
 
 
def site():
    name = None
    url = None
 
    argv = sys.argv[1:]
 
    try:
        opts, args = getopt.getopt(argv, "n:u:")  # Режим коротких опций
     
    except:
        print("Error")
 
    for opt, arg in opts:
        if opt in ['-n']:
            name = arg
        elif opt in ['-u']:
            url = arg
     
 
    print( name +" " + url)
 
site()

Чтобы протестировать приведённый выше код, введите следующее в командной строке:

python3 test.py -n EXAMPLE -u www.example.com

Вывод:

EXAMPLE www.example.com

Следующий пример демонстрирует использование режима длинных опций:

Примеры

import sys
import getopt
 
def site():
    name = None
    url = None
 
    argv = sys.argv[1:]
 
    try:
        opts, args = getopt.getopt(argv, "n:u:",  
                                   ["name=",
                                    "url="])  # Режим длинных опций
     
    except:
        print("Error")
 
    for opt, arg in opts:
        if opt in ['-n', '--name']:
            name = arg
        elif opt in ['-u', '--url']:
            url = arg
     
 
    print( name + " " + url)
 
site()

Чтобы протестировать приведённый выше код, введите следующее в командной строке:

python3 test.py -n EXAMPLE -u www.example.com

Вывод:

EXAMPLE www.example.com

Другой метод — getopt.gnu_getopt, который используется редко, поэтому мы не будем здесь вдаваться в подробности.


Исключение getopt.GetoptError

Это исключение вызывается, когда список аргументов не найден, или когда обязательный аргумент опции пуст.

Аргумент исключения — это строка, указывающая причину ошибки. Атрибутыmsgиoptсодержат информацию об ошибке для соответствующей опции.

Примеры

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

usage: test.py -i <inputfile> -o <outputfile>

Код файла test.py выглядит следующим образом:

Примеры

#!/usr/bin/python3

import sys, getopt

def argv(argv):
   inputfile = ''
   outputfile = ''
   try:
      opts, args = getopt.getopt(argv,"hi:o:",["ifile:,"ofile"])
   except getopt.GetoptError:
      print ('test.py -i <inputfile> -o <outputfile>')
      sys.exit(2)
   for opt, arg in opts:
      if opt == '-h':
         print ('test.py -i <inputfile> -o <outputfile>')
         sys.exit()
      elif opt in ("-i", "--ifile"):
         inputfile = arg
      elif opt in ("-o", "--ofile"):
         outputfile = arg
   print ('Входной файл:', inputfile)
   print ('Выходной файл:', outputfile)

if __name__ == "__main__":
   main(sys.argv[1:])

При выполнении приведённого выше кода вывод будет следующим:

$ python3 test.py -h
usage: test.py -i <inputfile> -o <outputfile>

$ python3 test.py -i inputfile -o outputfile
输入的文件为: inputfile
输出的文件为: outputfile

Python3 基础语法Базовый синтаксис Python3

Другие расширения