Python3 Аргументы командной строки
Python предоставляет модулиgetopt иsys для получения аргументов командной строки.
$ python test.py arg1 arg2 arg3
В Python вы также можете использоватьsysи егоsys.argvдля получения аргументов командной строки:
sys.argv— это список аргументов командной строки.
len(sys.argv)Подсчитывает количество аргументов командной строки.
Примечание:sys.argv[0]представляет имя скрипта.
Примеры
Код файла test.py выглядит следующим образом:
Примеры
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 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 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 выглядит следующим образом:
Примеры
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