Вопрос-Ответ

How can I read and process (parse) command line arguments?

Как я могу прочитать и обработать (разобрать) аргументы командной строки?

В Python, как мы можем узнать аргументы командной строки, которые были предоставлены для сценария, и обработать их?


Справочное чтение по теме: Что означает "sys.argv[1]"? (Что такое sys.argv и откуда оно взялось?). Для получения более конкретных примеров см. Реализация интерфейсов командной строки в стиле "[команда] [действие] [параметр]"? и как мне отформатировать справку по позиционным аргументам, используя optparse в Python?.

Переведено автоматически
Ответ 1
import sys

print("\n".join(sys.argv))

sys.argv это список, содержащий все аргументы, переданные скрипту в командной строке. sys.argv[0] это имя скрипта.

В основном,

import sys

print(sys.argv[1:])
Ответ 2

Каноническим решением в стандартной библиотеке является argparse (docs):

Вот пример:

from argparse import ArgumentParser

parser = ArgumentParser()
parser.add_argument("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE")
parser.add_argument("-q", "--quiet",
action="store_false", dest="verbose", default=True,
help="don't print status messages to stdout")

args = parser.parse_args()

argparse поддерживает (среди прочего):


  • Несколько вариантов в любом порядке.

  • Короткие и длинные варианты.

  • Значения по умолчанию.

  • Генерация справочного сообщения по использованию.

Ответ 3

Просто пытаюсь найти argparse, который лучше по этим причинам.. по сути:

(скопировано по ссылке)


  • модуль argparse может обрабатывать позиционные и необязательные аргументы, в то время как optparse может обрабатывать только необязательные аргументы


  • argparse не догматичен в отношении того, как должен выглядеть ваш интерфейс командной строки - поддерживаются такие опции, как -file или /file, а также обязательные опции. Optparse отказывается поддерживать эти функции, предпочитая чистоту практичности.


  • argparse выдает более информативные сообщения об использовании, включая использование командной строки, определенное на основе ваших аргументов, и справочные сообщения как для позиционных, так и для необязательных аргументов. Модуль optparse требует, чтобы вы написали свою собственную строку использования, и не имеет возможности отобразить справку для позиционных аргументов.


  • argparse поддерживает действия, которые потребляют переменное количество аргументов командной строки, в то время как optparse требует, чтобы точное количество аргументов (например, 1, 2 или 3) было известно заранее


  • argparse поддерживает анализаторы, которые отправляют во вложенные команды, в то время как optparse требует настройки allow_interspersed_args и выполнения отправки анализатора вручную


И мой личный фаворит:


  • argparse позволяет указывать параметры типа и действия add_argument() с помощью простых вызываемых объектов, в то время как optparse требует взлома атрибутов класса, таких как STORE_ACTIONS или CHECK_METHODS, для правильной проверки аргументов

Ответ 4

Существует также argparse модуль stdlib ("расширение" в optparse модуле stdlib). Пример из введения в argparse:

# script.py
import argparse

if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument(
'integers', metavar='int', type=int, choices=range(10),
nargs='+', help='an integer in the range 0..9')
parser.add_argument(
'--sum', dest='accumulate', action='store_const', const=sum,
default=max, help='sum the integers (default: find the max)')

args = parser.parse_args()
print(args.accumulate(args.integers))

Использование:

$ script.py 1 2 3 4
4

$ script.py --sum 1 2 3 4
10
python